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 - Arch Linux

    Lappi | Intel I3 - 16 GB RAM - 128 GB SSD - Arch Linux

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

    ________________________________________________________________________________

    RADIO TEAM BAWÜ - Wir haben Spaß an Musik!!!

    IPV64.net <-- DynDNS Service der Extraklasse

    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

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • 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 - Arch Linux

    Lappi | Intel I3 - 16 GB RAM - 128 GB SSD - Arch Linux

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

    ________________________________________________________________________________

    RADIO TEAM BAWÜ - Wir haben Spaß an Musik!!!

    IPV64.net <-- DynDNS Service der Extraklasse

  • 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?

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • 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.

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • 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?

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • 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" \

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • Ok, glaube hab den Fehler gefunden. Berechtigung auf clean.sh geändert .... jetzt läuft's :thumbup:

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • Super Danke Sojan :thumbup:

    Funktioniert jetzt alle :thumbup:

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

  • 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 :/

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

    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.

    Fragen Sie jemanden, der sich damit auskennt - am besten nicht den Administrator

    Archlinux Qtile und Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD
    GuidesOS Cinnamon / DELL Inspiron 3542 - Intel Pentium 3558U + 8 GB DDR3 + 490 GB SSD
    Voidlinux Xfce / DELL Inspiron 15z - Intel Core i5-3317U + 4 GB RAM + 240 GB SSD

    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!