Как показать окно сообщения графического интерфейса от bash-скрипта в linux?
Я пишу несколько небольших скриптов bash под Ubuntu Linux. Я хочу иметь возможность запускать их из графического интерфейса без необходимости в окне терминала для ввода любого ввода или просмотра любого вывода.
Пока что единственный вводимый пароль - это пароль для sudo - и gksudo прекрасно с этим справляется. Но я еще не нашел простой способ показать окно сообщения. Есть ли какая-нибудь команда 'gkmessage'? Я бы предпочел что-то, присутствующее при установке Ubuntu по умолчанию, но я не против установить новый пакет, если это необходимо.
15 ответов
Я верю, что 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"
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
Не стесняйтесь редактировать.
Похоже, что вы ищете приложение 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
Есть также варианты выбора слайдера, ошибок, списков и так далее.
Надеюсь это поможет.
Если больше ничего нет. вы можете запустить 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);'
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"
Вот небольшой скрипт 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"`
Существует также dialog
и версия KDE kdialog
, dialog
используется Slackware, поэтому он может быть не сразу доступен в других дистрибутивах.
Как насчет предупреждения Ubuntu. Его можно использовать после любой операции, чтобы сообщить о завершении и даже показать значок красного креста, если операция была завершена с ошибками
ls -la; alert
Вы можете использовать шеллмарки для отображения диалогового окна с графическим интерфейсом перед запуском сценария оболочки, что позволит пользователю вводить данные, которые будут помещены в среду.
#!/bin/bash
echo "Hello ${name}"
exit 0
---
[name]
type="text"
label="Please enter your name"
required=true
Запуск скрипта:
shellmarks hello.sh
Если вы введете «Стив» в поле и нажмете «Выполнить», вывод будет
Hello Steve
Раскрытие информации: я автор Shellmarks
Пример сценария bash для использования элементов управления Gambas GTK/QT (объектов GUI): Gambas IDE может использоваться для разработки даже больших графических интерфейсов пользователя и выступать в качестве сервера графического интерфейса. Примеры приложений можно скачать в магазине приложений Gambas.
https://gambas.one/gambasfarm/?id=823&action=search
Kdialog и диалог оба хороши, но я бы порекомендовал Zenity. Быстрый, легкий и намного лучше выглядящий xmessage или диалог.
Мне нравится то, что я вижу с помощью script-dialog. Он отвечает всем моим требованиям, а также некоторым:
- всплывающие окна с графическим интерфейсом, но есть резервный текстовый режим
- поддержка различных вариантов sudo (gksudo, kde-sudo, ...)
- может перезапуститься в окне терминала
Действительно, это оболочка для kdialog, zenity, dialog, whiptail и настраиваемый запасной вариант.
Недостатком является то, что у него нет интерфейса командной строки, а вместо этого он предназначен для использования в качестве исходного кода для сценария bash.