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

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

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

Ответов (13)

Решение

Я верю, что Zenity сделает то, что вы хотите. Он специально разработан для отображения диалогов 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"

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

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

Как насчет предупреждения 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

введите описание изображения здесь

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

Вот небольшой сценарий 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"`

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

или

zenity --help

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

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

Приложение zenity - это то, что вы ищете.

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

my_variable=$(zenity --entry)

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

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

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

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

my_date=$(zenity --calendar)

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

echo ${my_date}

дает:

05.08.2009

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

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