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

112

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

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

Теги:
scripting
gtk

12 ответов

105
Лучший ответ

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

  • 3
    zenity --help не очень помогает. Чтобы сделать это полезным, вам нужно убедиться, что вы установили здесь --text=My text here чтобы он что-то отображал ...
  • 9
    Например, zenity --info --text="Calculation complete"
Показать ещё 4 комментария
107

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

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

B.e.a.utiful!

  • 0
    Благодарю. Это действительно красиво!
  • 0
    Это работает и с Fedora. Я уверен, что любой дистрибутив Linux может сделать это.
Показать ещё 8 комментариев
52

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

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

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

Приложение 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

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

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

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

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

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

Здесь немного 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"`
4

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

2

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

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

ls -la; alert
2

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

или

zenity --help
1

если ничего другого нет. вы можете запустить 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);'
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню