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

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

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

10.08.2008 04:07:55
Ciro Santilli 冠状病毒审查六四事件法轮功 17.11.2018 20:43:55
12 ОТВЕТОВ
РЕШЕНИЕ

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

139
10.08.2008 06:40:47
zenity --helpне очень полезно Чтобы сделать это полезным, вам нужно убедиться, что вы настроили --text=My text hereотображение чего-то ...
Stephen 26.10.2011 04:03:21
Напримерzenity --info --text="Calculation complete"
Craig McQueen 23.12.2013 01:32:25
@ Стефен, по какой-то странной причине правильная команда zenity --help-all.
GKFX 9.09.2014 19:26:46
Я не люблю программы, которые должны открывать дисплей, чтобы напечатать сообщение справки ...
thoni56 11.11.2016 12:09:46
Я использую этот метод для отображения предупреждений или ошибок в моем .xinitrcпри запуске xorgсервера. В противном случае ошибки будут прозрачными. Я также предпочитаю это за zenityкадром , kdialogтак как KDE еще не начала и GTK ЛИЭС более легкий.
cmevoli 16.12.2016 12:35:16

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

18
10.07.2018 03:24:18
Это дедушка их всех.
Ciro Santilli 冠状病毒审查六四事件法轮功 26.08.2016 19:44:37

Вот небольшой Tcl-скрипт, который будет делать то, что вы хотите. По умолчанию в Ubuntu должен быть установлен интерпретатор Wish.

#!/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
10.08.2008 04:34:36

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

6
7.03.2017 23:13:49

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

0
17.09.2008 02:13:53

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

или

zenity --help
3
13.02.2017 05:24:47

В 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}

дает:

08/05/2009

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

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

48
6.08.2009 14:40:55
Я вижу, zentityвыглядит круто. Однако он не является частью Ubuntu 12.04, поэтому я gxmessageвыбрал его.
Peter V. Mørch 24.02.2014 08:54:22

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

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

Красивая!

148
12.09.2013 08:14:57
Это работает и с Fedora. Я совершенно уверен, что любой дистрибутив Linux может сделать это.
kmatheny 10.09.2013 17:26:07
Не работает в Raspbian GNU / Linux 7. Есть ли пакет, который нужно установить?
carl verbiest 6.06.2015 06:26:02
в DEBiAN РЕПО: поиск APT-кэша уведомит-экранном @carlverbiest
santa 15.07.2015 13:57:46
по крайней мере, в Ubuntu 14.04, если вызвать notify-send с таймаутом 0, например, «notify-send -t 0 'hi there!'», вы получите всплывающее диалоговое окно, срок действия которого не истекает.
vancan1ty 8.05.2016 03:07:46
В Debian Jessie libnotify-binпакет содержит notify-sendдвоичный файл. Gnome3, кажется, не требует, notify-osdно я предполагаю, что другие среды рабочего стола могут требовать, чтобы в дополнение кlibnotify-bin
Jasen 16.10.2016 20:54:09

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

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

77
28.02.2014 11:39:09
ThorSummoner 24.07.2015 18:02:16
@ThorSummoner спасибо за совет. Для заинтересованного читателя разница в том, что whiptail --infobox(который не работает должным образом на терминалах, которые поддерживают альтернативный экран) возвращается без ожидания ввода пользователя, в то время как whiptail --msgbox(который работает) ожидает подтверждения пользователя перед выходом.
Stéphane Gourichon 6.01.2016 08:43:04
Я вспоминаю, что был недоволен msgbox, для моих целей в то время я думал, что мне нужно, чтобы вывод был доступен для просмотра в журнале или чем-то в этом роде;
ThorSummoner 6.01.2016 19:12:04
Много вариантов! Довольно красивые примеры
artu-hnrq 24.02.2020 07:27:43

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

ls -la; alert
3
10.03.2016 15:30:00

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"
7
9.02.2017 00:17:09

если больше ничего нет. Вы можете запустить 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);'
5
9.11.2017 03:44:31