Zenity: Shell-Menüs einfach erstellt

  • Mit Zenity lassen sich schnell und einfach Menüs erstellen.

    So kann es dann aussehen.

    Ich wollte das Aufrufen von Befehlen und Starten von Scripts möglichst an einem Ort zusammenfassen. Und am Besten bequem aus einer GUI heraus.

    Dazu reicht ein simples Script, dass schon fast selbsterklärend ist.

    • zuerst Größe und Titel des Fensters
    • dann die Spalten definieren - hier 3 Stück (--column )
    • anschließend werden die drei Spalten befüllt
    • von der ausgewählten Zeile wird der dritte Wert der Variablen "OUT" übergeben - was in diesem Beispiel der Befehl ist
    • der gespeicherte Befehl in der Variablen "OUT" wird zum Schluss im Terminal (hier Gnome-Terminal) ausgeführt.

    Damit das Gnome-Terminal sich nach einem Befehl nicht gleich wieder schließt, muss in den Einstellungen noch etwas vorgenommen werden.

    Grundsätzlich lässt sich das auch mit Aliases realisieren, aber so mit GUI finde ich es cooler. :)

    Edited once, last by Sojan (January 29, 2023 at 9:14 AM).

  • Das probiere ich heute Abend mal aus, dafür fallen mir noch eine Menge anderer Anwendungen ein... :thumbup:

    EDIT:

    Getestet und für gut befunden, sehr gutes Script.

    Ich benutze ein anderes Terminal daher habe ich die entsprechende Zeile geändert, damit das xfce4 Terminal offen bleibt, dieses mit -H öffnen.

    Code
    gnome-terminal --command="bash -c '$OUT' "

    beim xfce4 Terminal gegen:

    Code
    xfce4-terminal -H --command="bash -c '$OUT' "

    austauschen

    ________________________________________________________________________________

    PC | AMD Ryzen 7 3700X - NVIDIA GeForce RTX 2070 Super - 32 GB RAM - 1 TB NVME - 1 TB HDD - ArchLinux

    Lappi | Intel I3 - 16 GB RAM - 128 GB SSD - GuideOS

    Homi | Intel Atom 3 - 8 GB RAM - 1x 128 GB SSD - 2x 4 TB Seagate IronWolf HDD im RAID1 - Debian 12 mit OMV und Docker

    Edited once, last by KTT73 (January 27, 2023 at 3:20 PM).

  • Super Sache :)

    Ich habe das Script probiert und das Menü öffnet sich auch :thumbup:

    Wenn ich z.B. Htop starten möchte bekomme ich aber eine Fehlermeldung.

    Versuch mit Alacritty:

    alacritty --command="bash -c '$OUT' "

    Code
    Error: Failed to spawn command 'bash -c 'htop' ': No such file or directory (os error 2)
    Error: "Event loop terminated with code: 1"

    Versuch mit Kitty:

    kitty --command="bash -c '$OUT' "

    Code
    Unknown option: --command

    Ich weiß nicht wo ich an dieser Zeile drehen muss damit es funktioniert

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/
  • schau mal bei Kitty, welche Option es braucht, damit von Extern ein Befehl übergebeb werden kann.

    Code
    kitty --help

    ________________________________________________________________________________

    PC | AMD Ryzen 7 3700X - NVIDIA GeForce RTX 2070 Super - 32 GB RAM - 1 TB NVME - 1 TB HDD - ArchLinux

    Lappi | Intel I3 - 16 GB RAM - 128 GB SSD - GuideOS

    Homi | Intel Atom 3 - 8 GB RAM - 1x 128 GB SSD - 2x 4 TB Seagate IronWolf HDD im RAID1 - Debian 12 mit OMV und Docker

  • Super Sache :)

    Ich habe das Script probiert und das Menü öffnet sich auch :thumbup:

    Wenn ich z.B. Htop starten möchte bekomme ich aber eine Fehlermeldung.

    Versuch mit Alacritty:

    alacritty --command="bash -c '$OUT' "

    Habe es mit Alacritty in der VM getestet

    Code
    alacritty --hold --command $OUT

    --hold bewirkt, dass das Fenster nach dem Befehl geöffnet bleibt.

  • Quote

    --hold bewirkt, dass das Fenster nach dem Befehl geöffnet bleibt.

    Super, das hat schonmal funktioniert :thumbup:

    Kann man in dem Script noch einen Befehl eingeben dass das Zenity-Menü geöffnet beibt?

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/
  • schau mal bei Kitty, welche Option es braucht, damit von Extern ein Befehl übergebeb werden kann.

    Code
    kitty --help

    Ja OK, für Kitty schaue ich mal in der --help nach ob ich etwas finde zumal ich lieber mit kitty als mit alacritty arbeite.

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/
  • Kann man in dem Script noch einen Befehl eingeben dass das Zenity-Menü geöffnet beibt?

    Glaube nicht. Solltest du aber etwas finden, dann gerne posten. Wäre auch interessiert. :)

    Habe mir ein Shortcut eingerichtet, damit kann ich erst einmal gut leben.

  • Gerade noch etwas rumgespielt. Es lassen sich auch verschiedene Felder miteinander kombinieren.

    • Kalender
    • Textfeld
    • Liste
    • Combo

    Als Einzeiler zum Ausprobieren im Terminal:

    Code
    zenity --width=400 --forms --title="Mein erstes Formular" --text="Abfrage" --add-calendar="Datum" --add-entry="Freitext" --add-list="Vorgang" --show-header --column-values="ID|Beschreibung" --list-values="1|Fall 1|2|Fall 2|3|Fall 3|4|Fall 4" --add-combo="Auswahl 1" --combo-values="Typ A|Typ B|Typ C" --add-combo="Auswahl 2" --combo-values="Typ 1|Typ 2|Typ 3" --forms --add-combo="Auswahl 3" --combo-values="Typ A|Typ B|Typ C" --add-combo="Auswahl 4" --combo-values="Typ 1|Typ 2|Typ 3"

    Der Rückgabewert des Formulars sieht dann so aus:

    Code
    01.02.2023|Keinen weiteren Text|2,Fall 2,|Typ A|Typ 2|Typ C|Typ 3
  • In meinem Zenity Shell Menü will folgender Befehl nicht funktionieren:

    "System" "Verwaiste Pakete löschen" "pacman -Qtdq | sudo pacman -Rns -" \

    Fehlermeldung im Terminal: Fehler: Es sind nicht mehrere Operationen gleichzeitig erlaubt

    Führe ich den Befehl direkt im Terminal aus läuft der ohne Probleme durch :thumbup:

    Hat jemand eine Idee woran's liegen könnte?

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/
  • In meinem Zenity Shell Menü will folgender Befehl nicht funktionieren:

    "System" "Verwaiste Pakete löschen" "pacman -Qtdq | sudo pacman -Rns -" \

    Fehlermeldung im Terminal: Fehler: Es sind nicht mehrere Operationen gleichzeitig erlaubt

    Führe ich den Befehl direkt im Terminal aus läuft der ohne Probleme durch :thumbup:

    Hat jemand eine Idee woran's liegen könnte?

    Der Fehlerhinweis kommt mir bekannt vor :)

    Habe mir damit beholfen, dass ich ein kleines Script mit den Befehlen erstellt habe und dieses von Zenity aus starte.

    Beispiel-Script (update.sh):

    Bash
    #!/bin/bash
    sudo pacman -Syu
    yay -Ps
    df -h

    Zenity

    Code
    ...
    "Test" "Aus dem Linux-Guides-Forum" "./update.sh" \
    ...
  • Der Fehlerhinweis kommt mir bekannt vor :)

    Habe mir damit beholfen, dass ich ein kleines Script mit den Befehlen erstellt habe und dieses von Zenity aus starte.

    Beispiel-Script (update.sh):

    Bash
    #!/bin/bash
    sudo pacman -Syu
    yay -Ps
    df -h

    Zenity

    Code
    ...
    "Test" "Aus dem Linux-Guides-Forum" "./update.sh" \
    ...

    Hi Sojan , habe eine Datei "/home/gonzo/myscript/clean.sh" erstellt:

    Bash
    #!/bin/bash
    pacman -Qtdq | sudo pacman -Rns -

    Aufruf in Zenity funktioniert trotzdem nicht:

                "System" "Verwaiste Pakete löschen" "/home/gonzo/myscript/clean.sh" \

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/
  • Gonzo-3004

    Damit nicht für jeden kleinen Befehl ein eigenes Script erstellt werden muss, kannst du auch mit Funktionen arbeiten

    Wieder die ./update.sh

    Die Angabe vor dem () ist der Funktionsname und kann beliebig gewählt werden. In den geschweiften Klammern kommen dann die Kommandos rein. Und am Ende darf "$@" nicht fehlen.

    Die Funktionen lassen sich dann mit Script-Name und Funktionsname aufrufen, also ./update.sh bash_df oder ./update.sh bash_lsblk usw.

  • Gonzo-3004

    Damit nicht für jeden kleinen Befehl ein eigenes Script erstellt werden muss, kannst du auch mit Funktionen arbeiten

    Wieder die ./update.sh

    Die Angabe vor dem () ist der Funktionsname und kann beliebig gewählt werden. In den geschweiften Klammern kommen dann die Kommandos rein. Und am Ende darf "$@" nicht fehlen.

    Die Funktionen lassen sich dann mit Script-Name und Funktionsname aufrufen, also ./update.sh bash_df oder ./update.sh bash_lsblk usw.

    Klasse, funktioniert bestens :):thumbup:

    Noch kurze Frage:

    wiso geht eig. "~/myscript/myfunctions.sh rsyncmmc" \ nicht?

    Muss immer "/home/gonzo/myscript/myfunctions.sh rsyncmmc" \ angeben :/

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/

    Edited once, last by Gonzo-3004 (November 12, 2023 at 4:28 PM).

  • Noch kurze Frage:

    wiso geht eig. "~/myscript/myfunctions.sh rsyncmmc" \ nicht?

    Muss immer "/home/gonzo/myscript/myfunctions.sh rsyncmmc" \ angeben :/

    Nur eine Vermutung: Es wird ein Subprozess gestartet, der keinen Bezug zu deiner Shell hat. Entsprechend kann der Prozess auch nichts mit "~" anfangen.

    Ich würde stattdessen die Shell-Variable $HOME nutzen. Kannst ja mal echo $HOME im Terminal eingeben.

    Also "$HOME/myscript/myfunctions.sh rsyncmmc"

    Hätte auch den Vorteil, falls du dich einmal umbenennen solltest, nicht alle Scripte abändern zu müssen. :)

  • Seit dem Update auf Zenity 4 passt sich das Menü nicht mehr dem Dark Mode an, die Schaltflächen, die Fensterleiste oben und die Schriftgröße ..... alles viel zu breit und zu groß ;( Das Menü nimmt fast den ganze Bildschirm ein. Kann man das iwo einstellen?

    man zenity spuckt hierzu nichts brauchbares aus.

    Linux Command Library     Commandlinefu.com

    Code
       __   _                  _____     _    __      
      / /  (_)__  __ ____ __  / ___/_ __(_)__/ /__ ___
     / /__/ / _ \/ // /\ \ / / (_ / // / / _  / -_|_-<
    /____/_/_//_/\_,_//_\_\  \___/\_,_/_/\_,_/\__/___/

    Edited once, last by Gonzo-3004 (December 22, 2023 at 8:28 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!