ubuntuusers.de

Einfache GUI für Bash Script

Status: Ungelöst | Ubuntu-Version: Xubuntu 17.10 (Artful Aardvark)
Antworten |

stevelande

Anmeldungsdatum:
18. September 2010

Beiträge: 147

Wohnort: /home

Ich suche eine einfache Möglichkeit ein Bash Script per GUI Button zu starten und das laufende Programm zu beenden. Haben es mit Zenity versucht aber leider funktioniert der notification Aufruf wohl nicht unter Xubuntu. Als Anleitung diente mir das Wiki https://wiki.ubuntuusers.de/Zenity/#Grundgeruest-erstellen Hab ihr einen Tipp für mich?

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Vielleicht mit etwas mehr Details? Was willst du wie beenden? Was hast du bisher gebaut? Grafisch starten geht einfach über .desktop-Dateien.

stevelande

(Themenstarter)

Anmeldungsdatum:
18. September 2010

Beiträge: 147

Wohnort: /home

Habe das ganze nun über Yad gelöst. Weiß nur noch nicht wie ich das Programm,welches über das Script gestartet wird, komfortable beenden kann.

das Bash Script zum Starten des Programmes.

#!/bin/bash

python main.py  --json --host=192.168.1.139 --effect color_spectrum --config=/home/ganja/Downloads/hyperion.config.json

Das Script zum starten der GUI.(noch nicht fertig)

#!/bin/bash
PATH = /home/ganja/Downloads/hyperion mpd/hyperion-audio-effects-master/   #Pfad angeben
#YAD Dialog erstellen
yad --title="Hyperion Musik Visualisation" --text="Hyperion Steuerung starten oder beenden" --button="Starten" --button="Beenden" --image=/pfad/zum/bild/im/fenster.png
#Returnwert speichern
ret=$?
#Auswerten des Returnwertes
if [ $ret = 0 ] #Wenn der Benutzer auf starten drückt,
then            #dann führe folgenden Befehl aus
 ./Stevehyp.sh          #Befehl
else            #Ansonsten führe diesen Befehl aus
 exit 1         #Befehl (hier exit 1 für beenden)
fi

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

  1. Um einer Variable einen Wert zuzuweisen, dürfen keine Leerzeichen vor und nach dem Zuweisungsoperator stehen.

  2. Variablen, die du definierst, sollten alle klein geschrieben werden, da Umgebungsvariablen immer gross geschrieben werden.

  3. Bist du sicher, dass du die Umgebungsvariable $PATH überschreiben willst?

  4. Das Auswerten des Rückgabewertes kann man auch eleganter lösen, zum Beispiel:

    1
    2
    ls /     && echo "jawohl" || echo "nein"
    ls /root && echo "jawohl" || echo "nein" 
    

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Hi stevelande

Um einfache GUIs zu erstellen, hab ich mir ein Gerüst für yad zurechtgelegt, das man einfach um weitere Fensterelemente erweitern kann. Beim Klick auf Starten oder Beenden wird die hinterlegte Funktion ausgeführt, das Dialogfenster bleibt dabei geöffnet bis Exit geklickt wird.

Weiß nur noch nicht wie ich das Programm,welches über das Script gestartet wird, komfortable beenden kann.

Mein Vorschlag: die PID von python in eine Datei schreiben und bei Funktionsaufruf prüfen, ob der Prozess läuft

Stevehyp.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

### $pidfile setzen, wenn Instanzen von Hyperion auch beendet werden sollen,
### wenn diese NICHT über das yad Skript gestartet wurden.
### Muß gleich dem Dateiname im yad Skript sein
#pidfile="/tmp/hyperion.pid"

python main.py  --json --host=192.168.1.139 --effect color_spectrum --config=/home/ganja/Downloads/hyperion.config.json &
pid=$!
# PID in Datei schreiben
if [ -n "$pidfile" ]; then
    echo $pid >"$pidfile"
fi

Skript zum Starten der yad GUI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/bash

path="/home/ganja/Downloads/hyperion mpd/hyperion-audio-effects-master"
pidfile="/tmp/hyperion.pid"


### INFO: Icons
###   Icons eines Desktop-Themes durchsuchen:
###   yad-icon-browser <THEME>
###   <THEME> ist ein Ordner in /usr/share/icons/, z.B. Adwaita
###
###   GTK Icons anzeigen:
###   Paket gtk2.0-examples installieren
###   gtk-demo starten und Doppelklick auf:
###   Stock Item and Icon Browser
###   Spalte "ID" = Icon Name für yad 


function start_hyperion (){
    if find_process; then
        return
    fi
    # Hyperion Steuerung starten 
    cd "$path" && ./Stevehyp.sh
}

function stop_hyperion (){
    if find_process; then
        kill $(<"$pidfile")
    fi
}

function find_process (){
    # Testen, ob ein Prozess "python" mit der PID
    # aus Datei $pidfile läuft
    if [ -f "$pidfile" ]; then
        pid=$(<"$pidfile")
        if [ "$(ps -p $pid -o comm=)" = "python" ]; then
           return 0
        fi
    fi
    return 1
}

# Funktionen/Variablen an (Unter)Prozesse weitergeben
export -f start_hyperion stop_hyperion find_process
export path pidfile

# YAD Dialog erstellen
yad --form --columns=1 --window-icon=emblem-music-symbolic \
    --title="Hyperion Musik Visualisation" \
    --text="Hyperion Steuerung starten oder beenden?" \
    --image="/pfad/zum/bild/im/fenster.png" \
    --field="Starten!system-run-symbolic!Hyperion Steuerung starten":FBTN "bash -c start_hyperion" \
    --field="Beenden!system-shutdown-symbolic!Hyperion Steuerung beenden":FBTN "bash -c stop_hyperion" \
    --button="Exit!gtk-quit!Yad Dialog beenden":1

Gruß TNT

Antworten |