¿Cómo mostrar un cuadro de mensaje GUI de un script bash en Linux?

151

Estoy escribiendo algunos pequeños scripts de bash en Ubuntu Linux. Quiero poder ejecutarlos desde la GUI sin necesidad de una ventana de terminal para ingresar ninguna entrada o ver cualquier salida.

Hasta ahora, la única entrada requerida es una contraseña para sudo, y gksudo maneja eso bien. Pero todavía no he encontrado una manera fácil de mostrar un cuadro de mensaje. ¿Hay algún tipo de comando 'gkmessage' disponible? Prefiero algo presente en una instalación predeterminada de Ubuntu, pero no me importa instalar un nuevo paquete si es necesario.

Blorgbeard está fuera
fuente
Relacionado: unix.stackexchange.com/questions/144924/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

143

Creo que Zenity hará lo que quieras. Está específicamente diseñado para mostrar cuadros de diálogo GTK desde la línea de comandos, y está disponible como un paquete de Ubuntu .

Derek Park
fuente
44
zenity --helpNo es tan útil. Para que esto sea útil, debe asegurarse de configurarlo --text=My text herepara que muestre algo ...
Stephen
10
Por ejemplozenity --info --text="Calculation complete"
Craig McQueen el
3
@Stephen, por alguna extraña razón, el comando correcto es zenity --help-all.
GKFX
3
No me gustan los programas que necesitan abrir la pantalla para imprimir el mensaje de ayuda ...
thoni56
Utilizo este método para mostrar advertencias o errores .xinitrcal iniciar mi xorgservidor. De lo contrario, los errores serían transparentes. También prefiero este zenitysobre kdialogdesde KDE no se ha iniciado todavía y librerías GTK son más ligeros.
cmevoli
152

Si está utilizando Ubuntu muchas distribuciones, el notify-sendcomando arrojará una de esas agradables notificaciones perecederas en la esquina superior derecha. Al igual que:

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

¡Hermoso!

chmac
fuente
2
Esto también funciona con Fedora. Estoy bastante seguro de que cualquier distribución de Linux puede hacer esto.
kmatheny
44
No funciona en Raspbian GNU / Linux 7. ¿Hay algún paquete que deba instalarse?
carl verbiest
1
en los repositorios de debian: apt-cache search notify-osd @carlverbiest
santa
2
en Ubuntu 14.04 al menos, si la llamada se notifica-envía con tiempo de espera 0 como "notificar-enviar -t 0 '¡Hola!'", aparecerá un cuadro de diálogo emergente que no caduca.
vancan1ty
En Debian Jessie el libnotify-binpaquete contiene el notify-sendbinario. Parece que Gnome3 no requiere, notify-osdpero supongo que otros entornos de escritorio pueden requerir eso además delibnotify-bin
Jasen
78

Todos mencionan zenity, parece que hay muchos otros. Una lista confusa pero interesante está en http://alternativeto.net/software/zenity/

Primero, un ejemplo de zenity con marcado de formato de texto, título de ventana, etiqueta de botón.

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

xmessagees muy antiguo, por lo que es estable y probablemente esté disponible en todas las distribuciones que usan X (ya que se distribuye con X). Es personalizable a través de recursos X, para aquellos que han estado usando Linux o Unix durante el tiempo suficiente para saber lo que significa ( .Xdefaults¿alguien?).

xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10

kdialog

(no probado)

En un PPA

YAD: Zenity On Steroids [Mostrar cuadros de diálogo gráficos desde scripts de Shell] ~ Web Upd8: blog Ubuntu / Linux . No parece que los diálogos de tamaño automático.

echo My text | yad \
--text-info \
--width=400 \
--height=200

Un gran ejemplo

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"

Otros no en repositorios estándar de Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Fuera de tema (para terminal)

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

Siéntase libre de editar.

Stéphane Gourichon
fuente
@ThorSummoner gracias por la sugerencia. Para el lector interesado, la diferencia es que whiptail --infobox(que no funciona correctamente en terminales que admiten pantallas alternativas) regresa sin esperar la entrada del usuario, mientras whiptail --msgboxque (que funciona) espera la confirmación del usuario antes de salir.
Stéphane Gourichon
Recuerdo que no estaba satisfecho con msgbox, para mis propósitos en ese momento, creo que necesitaba que la salida fuera visible en un registro o algo así;
ThorSummoner
¡Muchas opciones! Muy buenos ejemplos
artu-hnrq
49

La aplicación zenity parece ser lo que estás buscando.

Para recibir información de zenity , puede especificar una variable y tener la salida de zenity --entry guardada en ella. Se parece a esto:

my_variable=$(zenity --entry)

Si observa el valor en my_variable ahora, será lo que se haya escrito en el cuadro de diálogo de entrada emergente zenity.

Si desea dar algún tipo de aviso sobre lo que el usuario (o usted) debe ingresar en el cuadro de diálogo, agregue el modificador --text con la etiqueta que desee. Se parece a esto:

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

Zenity tiene muchas otras buenas opciones que son para tareas específicas, por lo que es posible que también desee comprobarlas con zenity --help . Un ejemplo es la opción --calendar que le permite seleccionar una fecha de un calendario gráfico.

my_date=$(zenity --calendar)

Lo que da una fecha bien formateada en función de lo que hizo clic el usuario:

echo ${my_date}

da:

05/08/2009

También hay opciones para selectores deslizantes, errores, listas, etc.

Espero que esto ayude.

Jim
fuente
Puedo ver que se zentityve genial. Sin embargo, no es parte de Ubuntu 12.04, así que fui con él gxmessage.
Peter V. Mørch
19

Encontré el comando xmessage , que es bastante bueno.

Blorgbeard está fuera
fuente
2
Ese es el abuelo de todos ellos.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
8

Aquí hay un pequeño script Tcl que hará lo que quieras. El intérprete Wish debe instalarse de manera predeterminada en Ubuntu.

#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent

Llámalo así:

myanswer=`gui-prompt "type your answer and press enter"`
Mark Harrison
fuente
7

alerty notify-sendparece ser lo mismo Lo uso notify-sendpara mensajes que no son de entrada, ya que no roba el foco y no puedo encontrar una manera de evitar que zenity, etc. haga esto.

p.ej

# 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"
Dave Thebuskeruk
fuente
6

También hay dialogy la versión de KDE kdialog. dialoges utilizado por slackware, por lo que podría no estar disponible de inmediato en otras distribuciones.

Steve Baker
fuente
6

Si nada más está presente. puedes lanzar un xterm y hacer eco en él, así:

 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);'
usuario6795571
fuente
3

¿Qué hay de la alerta de Ubuntu ? Se puede usar después de cualquier operación para alertarlo de que finalizó e incluso mostrar el icono de la cruz roja si la operación se completó con errores

ls -la; alert
mulya
fuente
3

Zenity es realmente la herramienta exacta que creo que estás buscando.

o

zenity --help
Lnux
fuente
0

Kdialog y dialog son buenos, pero recomendaría Zenity. Rápido, fácil y mucho mejor mirando el mensaje o diálogo.

Jarek
fuente
0

Ejemplo de script bash para usar los controles Gambas GTK / QT (objetos GUI): Gambas IDE se puede usar para diseñar incluso GUI grandes y actuar como un servidor GUI. Las explicaciones de ejemplo se pueden descargar de la tienda de aplicaciones Gambas.
https://gambas.one/gambasfarm/?id=823&action=search

ingrese la descripción de la imagen aquí

Peter Bauer
fuente