Как показать окно сообщения графического интерфейса пользователя из сценария bash в Linux?

Я пишу несколько небольших сценариев bash под Ubuntu linux. Я хочу иметь возможность запускать их из графического интерфейса без необходимости в окне терминала для ввода любого ввода или просмотра любого вывода.

Пока что единственный требуемый ввод - это пароль для sudo - и gksudo с этим справляется. Но я еще не нашел простого способа показать окно сообщения. Доступна ли какая-нибудь команда "gkmessage"? Я бы предпочел, чтобы что-то присутствовало в стандартной установке Ubuntu, но при необходимости я не возражаю против установки нового пакета.

Связанный: unix.stackexchange.com/questions/144924/…

Ciro Santilli TRUMP BAN IS BAD 17.11.2018 23:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
160
1
173 113
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Я нашел команду xсообщение, которая довольно хороша.

Это дедушка их всех.

Ciro Santilli TRUMP BAN IS BAD 26.08.2016 22:44

Вот небольшой сценарий Tcl, который сделает то, что вы хотите. Интерпретатор Wish должен быть установлен в Ubuntu по умолчанию.

#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent

Назовите это так:

myanswer=`gui-prompt "type your answer and press enter"`
Ответ принят как подходящий

Я верю, что Зенити сделает то, что вы хотите. Он специально разработан для отображения диалогов GTK из командной строки и доступен как Пакет Ubuntu.

zenity --help не так полезен. Чтобы сделать это полезным, вам нужно убедиться, что вы настроили --text=My text here, чтобы он отображал что-то ...

Stephen 26.10.2011 08:03

Например. zenity --info --text = "Calculation complete"

Craig McQueen 23.12.2013 05:32

@Stephen, по какой-то странной причине правильная команда - zenity --help-all.

GKFX 09.09.2014 23:26

Мне не нравятся программы, которым нужно открывать дисплей, чтобы распечатать справочное сообщение ...

thoni56 11.11.2016 15:09

Я использую этот метод для отображения предупреждений или ошибок в моем .xinitrc при запуске сервера xorg. В противном случае ошибки были бы прозрачными. Я также предпочитаю zenity, а не kdialog, поскольку KDE еще не запущен, а библиотеки GTK более легкие.

cmevoli 16.12.2016 15:35

@ thoni56 не доставляет неудобств, так как при любом использовании этой программы требуется X-дисплей, но это правда: unset DISPLAY ; LC_ALL=C zenity --help-all Unable to init server: Could not connect: Connection refused (zenity:32545): Gtk-WARNING **: 09:24:17.177: cannot open display:

Stéphane Gourichon 06.02.2019 11:25
zenity docs
Pedro Lobito 20.07.2020 03:14

Также есть dialog и версия KDE kdialog. dialog используется Slackware, поэтому он может быть недоступен сразу в других дистрибутивах.

Kdialog и dialog хороши, но я бы порекомендовал Zenity. Быстро, легко и намного лучше выглядит сообщение или диалоговое окно.

Зенити - действительно тот инструмент, который, я думаю, вы ищете.

или же

zenity --help

Приложение рассудительность - это то, что вы ищете.

Чтобы получить входные данные из рассудительность, вы можете указать переменную и сохранить в нее выходные данные zenity - вход. Это выглядит примерно так:

my_variable=$(zenity --entry)

Если вы сейчас посмотрите на значение в my_variable, это будет то, что было введено в диалоговом окне ввода всплывающего окна zenity.

Если вы хотите дать подсказку о том, что пользователь (или вы) должен ввести в диалоговом окне, добавьте переключатель --текст с нужной меткой. Это выглядит примерно так:

my_variable=$(zenity --entry --text = "What's my variable:")

В Zenity есть много других хороших опций, предназначенных для конкретных задач, так что вы можете проверить и их с помощью зенитизм - помощь. Одним из примеров является опция --календарь, которая позволяет вам выбирать дату из графического календаря.

my_date=$(zenity --calendar)

Это дает красиво отформатированную дату в зависимости от того, что пользователь щелкнул:

echo ${my_date}

дает:

08/05/2009

Также есть варианты для селекторов слайдеров, ошибок, списков и так далее.

Надеюсь это поможет.

Я вижу, что zentity выглядит круто. Однако он не является частью Ubuntu 12.04, поэтому вместо этого я выбрал gxmessage.

Peter V. Mørch 24.02.2014 12:54

Если вы используете Ubuntu во многих дистрибутивах, команда notify-send выдаст одно из этих замечательных уведомлений о скоропортящихся продуктах в правом верхнем углу. Вот так:

notify-send "My name is bash and I rock da house"

Красивый!

Это также работает с Fedora. Я почти уверен, что это может сделать любой дистрибутив Linux.

kmatheny 10.09.2013 21:26

Не работает в Raspbian GNU / Linux 7. Есть ли пакет, который нужно установить?

carl verbiest 06.06.2015 09:26

в репозиториях debian: apt-cache search notify-osd @carlverbiest

santa 15.07.2015 16:57

в Ubuntu 14.04 по крайней мере, если вызов notify-send с таймаутом 0, например, «notify-send -t 0 'hi there!'», вы получите всплывающее диалоговое окно, срок действия которого не истекает.

vancan1ty 08.05.2016 06:07

В Debian Jessie пакет libnotify-bin содержит двоичный файл notify-send. Gnome3, похоже, не требует notify-osd, но я предполагаю, что в других средах рабочего стола это может потребоваться в дополнение к libnotify-bin

Jasen 16.10.2016 23:54

Это также доступно по умолчанию в Slackware 14.2.

DaveGauer 28.03.2017 01:19

Прекрасно работает с LXQt, где по умолчанию не установлены никакие другие альтернативы.

Murphy 01.11.2019 02:01

Все говорят о зенитизма, кажется, много других. Запутанный, но интересный список на http://alternativeto.net/software/zenity/

Во-первых, пример zenity с разметкой форматирования текста, заголовком окна, меткой кнопки.

zenity \
--info \
--text = "<span size=\"xx-large\">Time is $(date +%Hh%M).</span>\n\nGet your <b>coffee</b>." \
--title = "Coffee time" \
--ok-label = "Sip"

gxсообщение

gxmessage "my text"

xсообщение

xmessage очень старый, поэтому он стабилен и, вероятно, доступен во всех дистрибутивах, использующих X (поскольку он распространяется с X). Его можно настроить с помощью ресурсов X для тех, кто использует Linux или Unix достаточно долго, чтобы знать, что это означает (.Xdefaults, кто-нибудь?).

xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10

kdialog

(не проверено)

В PPA

YAD: Zenity On Steroids [Отображение графических диалогов из сценариев оболочки] ~ Web Upd8: блог Ubuntu / Linux. Не похоже на автоматическое изменение размера диалогов.

echo My text | yad \
--text-info \
--width=400 \
--height=200

Более крупный пример

yad \
--title = "Desktop entry editor" \
--text = "Simple desktop entry editor" \
--form \
--field = "Type:CB" \
--field = "Name" \
--field = "Generic name" \
--field = "Comment" \
--field = "Command:FL" \
--field = "Icon" \
--field = "In terminal:CHK" \
--field = "Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE \
--button = "WebUpd8:2" \
--button = "gtk-ok:0" \
--button = "gtk-cancel:1"

Другие не в стандартных репозиториях Ubuntu

  • Shellgui
  • xdialog
  • gtkdialog

Не по теме (для терминала)

whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20

Не стесняйтесь редактировать.

Примечание, --infobox whiptail имеет давнюю ошибку отображения с xterm (gnome-terminal)

ThorSummoner 24.07.2015 21:02

@ThorSummoner спасибо за подсказку. Для заинтересованного читателя разница в том, что whiptail --infobox (который не работает должным образом на терминалах, поддерживающих альтернативный экран) возвращается, не дожидаясь ввода данных пользователем, в то время как whiptail --msgbox (который работает) ожидает подтверждения пользователя перед выходом.

Stéphane Gourichon 06.01.2016 11:43

Я помню, что меня не устраивал msgbox, для моих целей в то время я думаю, что мне нужно было, чтобы вывод можно было просмотреть в журнале или что-то в этом роде;

ThorSummoner 06.01.2016 22:12

Вариантов очень много! Довольно хорошие примеры

artu-hnrq 24.02.2020 10:27

Как насчет Ubuntu тревога. Его можно использовать после любой операции, чтобы предупредить о ее завершении и даже показать значок красного креста, если операция завершилась с ошибками.

ls -la; alert

alert и notify-send кажутся одним и тем же. Я использую notify-send для сообщений без ввода, поскольку он не крадет фокус, и я не могу найти способ остановить zenity и т. д. От этого.

например

# This will display message and then disappear after a delay:
notify-send "job complete"

# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"

если ничего другого нет. вы можете запустить xterm и повторить в нем эхо, например:

 xterm -e bash -c 'echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);'

Пример сценария bash для использования элементов управления Gambas GTK / QT (объекты GUI): Gambas IDE может использоваться для разработки даже больших графических интерфейсов пользователя и выступать в качестве сервера графического интерфейса. Примеры приложений можно скачать в магазине приложений Gambas. https://gambas.one/gambasfarm/?id=823&action=search

Другие вопросы по теме