Як показати вікно повідомлення GUI з скрипту bash в Linux?


152

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

Поки єдиний необхідний вхід - це пароль для sudo - і gksudo обробляє це добре. Але я ще не знайшов простий спосіб показати поле для повідомлень. Чи є якась команда 'gkmessage'? Я вважаю за краще щось присутнє в установці Ubuntu за замовчуванням, але я не проти встановити новий пакет, якщо потрібно.


Відповіді:


143

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


4
zenity --helpне так корисно. Щоб зробити це корисним, вам потрібно переконатися, що ви налаштуєте --text=My text hereйого відображати щось ...
Stephen

10
Напр.zenity --info --text="Calculation complete"
Крейг МакКуїн

3
@Stephen, чомусь правильна команда zenity --help-all.
GKFX

3
Мені не подобаються програми, яким потрібно відкрити дисплей, щоб надрукувати довідку ...
thoni56

Я використовую цей метод для відображення попереджень або помилок під .xinitrcчас запуску xorgсервера. Інакше помилки були б прозорими. Я також вважаю за краще це за zenityкадром , kdialogтак як KDE ще не почала і GTK ЛІЕС легший.
cmevoli

153

Якщо ви використовуєте багато дистрибутивів Ubuntu,notify-send команда перекине одне з цих приємних швидкопсувних повідомлень у верхній правий кут. Так:

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

Гарний!


2
Це працює і з Fedora. Я впевнений, що будь-який дистрибутив Linux може це зробити.
kmatheny

4
Не працює на Raspbian GNU / Linux 7. Чи є пакет, який потрібно встановити?
carl verbiest

1
у програмі debian repos: apt-cache search notify-osd @carlverbiest
santa

2
принаймні, в Ubuntu 14.04, якщо сповіщення-відправлення дзвінка із затримкою 0 на зразок "notify-send -t 0" привіт!
vancan1ty

У Debian Jessie libnotify-binпакунок містить notify-sendдвійковий файл. Здається, Gnome3 не вимагає, notify-osdале, мабуть, інші середовища на робочому столі можуть вимагати, крім того,libnotify-bin
Jasen

78

Всі згадують про вродливість, здається, що багато інших. Змішаний, але цікавий список знаходиться на веб-сайті http://alternativeto.net/software/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

кдіалог

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

У PPA

YAD: Зеніт на стероїдах [Відображення графічних діалогів із скриптів оболонки] ~ 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

  • черепахи
  • xdialog
  • gtkdialog

Поза темою (для терміналу)

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

Не соромтеся редагувати.


2
Зауважте, у whiptail's --infoboxє
давна

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

Я пригадую, що я не був задоволений msgbox, для своїх цілей я думаю, що мені потрібен був результат, щоб його можна було побачити в журналі або щось подібне;
ThorSummoner

Варіантів багато! Досить приємні приклади
artu-hnrq

49

У Zenity з'являється додаток , щоб бути то , що ви шукаєте.

Щоб взяти вхід із zenity , ви можете вказати змінну і зберегти в ній результат zenity - entry . Це виглядає приблизно так:

my_variable=$(zenity --entry)

Якщо ви подивитесь на значення в my_variable зараз, воно буде будь-яким, що було введено в діалоговому вікні введення спливаючої здатності .

Якщо ви хочете надати якийсь підказки щодо того, що користувач (або ви) повинні ввести у діалоговому вікні, додайте перемикач --text з міткою, яку ви хочете. Це виглядає приблизно так:

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

У Zenity є багато інших приємних варіантів, призначених для конкретних завдань, тож ви можете перевірити їх також із zenity --help . Один із прикладів - варіант --calendar, який дозволяє вам вибрати дату з графічного календаря.

my_date=$(zenity --calendar)

Що дає чітко відформатовану дату на основі того, що користувач натиснув:

echo ${my_date}

дає:

08.05.2009

Також є варіанти для вибору слайдера, помилок, списків тощо.

Сподіваюся, це допомагає.


Я бачу, zentityвиглядає круто. Однак він не є частиною Ubuntu 12.04, тому я пішов gxmessageзамість цього.
Петро В. Морч


8

Ось невеликий сценарій 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"`

8

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"

6

Є також dialogі версія KDE kdialog. dialogвикористовується slackware, тому він може бути недоступний для інших дистрибутивів.


6

якщо нічого іншого немає. ви можете запустити 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);'

3

Як щодо сповіщення Ubuntu . Його можна використовувати після будь-якої операції, щоб сповістити про закінчення і навіть показати піктограму червоного хреста, якщо оператон був закінчений помилками

ls -la; alert


0

Kdialog і діалог хороші, але я рекомендую Zenity. Швидкий, легкий і набагато краще виглядає xmessage або dialog.


0

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.