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





Я нашел команду xсообщение, которая довольно хороша.
Это дедушка их всех.
Вот небольшой сценарий 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"`
Я верю, что Зенити сделает то, что вы хотите. Он специально разработан для отображения диалогов GTK из командной строки и доступен как Пакет Ubuntu.
zenity --help не так полезен. Чтобы сделать это полезным, вам нужно убедиться, что вы настроили --text=My text here, чтобы он отображал что-то ...
Например. zenity --info --text = "Calculation complete"
@Stephen, по какой-то странной причине правильная команда - zenity --help-all.
Мне не нравятся программы, которым нужно открывать дисплей, чтобы распечатать справочное сообщение ...
Я использую этот метод для отображения предупреждений или ошибок в моем .xinitrc при запуске сервера xorg. В противном случае ошибки были бы прозрачными. Я также предпочитаю zenity, а не kdialog, поскольку KDE еще не запущен, а библиотеки GTK более легкие.
@ thoni56 не доставляет неудобств, так как при любом использовании этой программы требуется X-дисплей, но это правда: unset DISPLAY ; LC_ALL=C zenity --help-all Unable to init server: Could not connect: Connection refused (zenity:32545): Gtk-WARNING **: 09:24:17.177: cannot open display:
Также есть dialog и версия KDE kdialog. dialog используется Slackware, поэтому он может быть недоступен сразу в других дистрибутивах.
Kdialog и dialog хороши, но я бы порекомендовал Zenity. Быстро, легко и намного лучше выглядит сообщение или диалоговое окно.
Приложение рассудительность - это то, что вы ищете.
Чтобы получить входные данные из рассудительность, вы можете указать переменную и сохранить в нее выходные данные zenity - вход. Это выглядит примерно так:
my_variable=$(zenity --entry)
Если вы сейчас посмотрите на значение в my_variable, это будет то, что было введено в диалоговом окне ввода всплывающего окна zenity.
Если вы хотите дать подсказку о том, что пользователь (или вы) должен ввести в диалоговом окне, добавьте переключатель --текст с нужной меткой. Это выглядит примерно так:
my_variable=$(zenity --entry --text = "What's my variable:")
В Zenity есть много других хороших опций, предназначенных для конкретных задач, так что вы можете проверить и их с помощью зенитизм - помощь. Одним из примеров является опция --календарь, которая позволяет вам выбирать дату из графического календаря.
my_date=$(zenity --calendar)
Это дает красиво отформатированную дату в зависимости от того, что пользователь щелкнул:
echo ${my_date}
дает:
08/05/2009
Также есть варианты для селекторов слайдеров, ошибок, списков и так далее.
Надеюсь это поможет.
Я вижу, что zentity выглядит круто. Однако он не является частью Ubuntu 12.04, поэтому вместо этого я выбрал gxmessage.
Если вы используете Ubuntu во многих дистрибутивах, команда notify-send выдаст одно из этих замечательных уведомлений о скоропортящихся продуктах в правом верхнем углу. Вот так:
notify-send "My name is bash and I rock da house"
Красивый!
Это также работает с Fedora. Я почти уверен, что это может сделать любой дистрибутив Linux.
Не работает в Raspbian GNU / Linux 7. Есть ли пакет, который нужно установить?
в репозиториях debian: apt-cache search notify-osd @carlverbiest
в Ubuntu 14.04 по крайней мере, если вызов notify-send с таймаутом 0, например, «notify-send -t 0 'hi there!'», вы получите всплывающее диалоговое окно, срок действия которого не истекает.
В Debian Jessie пакет libnotify-bin содержит двоичный файл notify-send. Gnome3, похоже, не требует notify-osd, но я предполагаю, что в других средах рабочего стола это может потребоваться в дополнение к libnotify-bin
Это также доступно по умолчанию в Slackware 14.2.
Прекрасно работает с LXQt, где по умолчанию не установлены никакие другие альтернативы.
Все говорят о зенитизма, кажется, много других. Запутанный, но интересный список на 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 "my text"
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
(не проверено)
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"
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
Не стесняйтесь редактировать.
Примечание, --infobox whiptail имеет давнюю ошибку отображения с xterm (gnome-terminal)
@ThorSummoner спасибо за подсказку. Для заинтересованного читателя разница в том, что whiptail --infobox (который не работает должным образом на терминалах, поддерживающих альтернативный экран) возвращается, не дожидаясь ввода данных пользователем, в то время как whiptail --msgbox (который работает) ожидает подтверждения пользователя перед выходом.
Я помню, что меня не устраивал msgbox, для моих целей в то время я думаю, что мне нужно было, чтобы вывод можно было просмотреть в журнале или что-то в этом роде;
Вариантов очень много! Довольно хорошие примеры
Как насчет 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
Связанный: unix.stackexchange.com/questions/144924/…