Как показать окно сообщения GUI из bash script в Linux?

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

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

Ответ 1

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

Ответ 2

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

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

B.e.a.utiful!

Ответ 3

Все упоминают зенит, похоже, много других. Перепутанный, но интересный список находится на 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"

gxmessage

gxmessage "my text"

xmessage

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

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

Ответ 4

Приложение zenity похоже на то, что вы ищете.

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

my_variable=$(zenity --entry)

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

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

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

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

my_date=$(zenity --calendar)

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

echo ${my_date}

дает:

08/05/2009

Существуют также опции для селекторов слайдера, ошибок, списков и т.д.

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

Ответ 5

Я нашел команду xmessage, которая довольно хороша.

Ответ 6

Здесь немного Tcl script, который сделает то, что вы хотите. По умолчанию интерпретатор 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"`

Ответ 7

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

Ответ 8

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

или

zenity --help

Ответ 9

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

ls -la; alert

Ответ 10

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

например.

# 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"

Ответ 11

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

 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);'

Ответ 12

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