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. :)

    Einmal editiert, zuletzt von Sojan (29. Januar 2023 um 09:14)

  • 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 - 2 TB HDD - ArchLinux

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

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

    ________________________________________________________________________________

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

    Einmal editiert, zuletzt von KTT73 (27. Januar 2023 um 15:20)

  • 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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 - 2 TB HDD - ArchLinux

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

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

    ________________________________________________________________________________

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

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

  • Zitat

    --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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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

  • 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
  • Die Daten in eine SQL geben und tadaa habe ich ein... ähm... egal. Kann man für alles brauchen.

  • 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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

    Einmal editiert, zuletzt von Gonzo-3004 (12. November 2023 um 16:28)

  • 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 Openbox / ASUS R503C-SX051H - Intel Core i3-2350M + HD-Grafik 3000 + 8 GB DDR3 + 490 GB SSD

    Archlinux Xfce / 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

    Einmal editiert, zuletzt von Gonzo-3004 (22. Dezember 2023 um 20:28)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!