Как показать окно сообщения GUI из сценария bash в linux?

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

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

12 ответов


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


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

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

Б. Е. а.прекрасный!


все упоминают Зенит, кажется, есть много других. Смешанный, но интересный список находится в 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

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

в ППА

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

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

Off-topic (для терминала)

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

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


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

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

my_variable=$(zenity --entry)

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

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

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

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

my_date=$(zenity --calendar)

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

echo ${my_date}

выдает:

08/05/2009

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

надеюсь, что это помогает.


нашел xmessage команда, которая достаточно хороша.


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

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"

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


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

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

ls -la; alert

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

или

zenity --help

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