Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
26.07.2021, 16:07:53

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
  • Mitglieder insgesamt: 25781
  • Letzte: Martina1
Statistiken
  • Beiträge insgesamt: 746893
  • Themen insgesamt: 60070
  • Heute online: 419
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema: [gelöst]  Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer  (Gelesen 1173 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Linux Mint 20.1 Cinnamon

Ich habe ein Script was im Prinzip auch funktioniert
#!/bin/bash
# Teamviewer-Verbindungs-Auswahl
#

annette=111
sophie=222
claudia=333
i=0

function tviewer
{
teamviewer &
sleep 3
wmctrl -a "TeamViewer"
sleep 1
for i in {0..11}
 do xte "key Tab"
 i=$i+1
done
xte "str $idnr"
}

auswahl=`dialog --radiolist "verbinden mit ..." 0 0 3 \
  Annette "" ON\
  Sophie "" off\
  Claudia "" off 3>&1 1>&2 2>&3`
dialog --clear
clear

case "$auswahl" in
 Annette) idnr=$annette
  ;;
 Sophie) idnr=$sophie
  ;;
Claudia) idnr=$claudia
  ;;
esac

tviewer
Es offnet den Teamviewer und trägt die gewählte ID-Nummer ein.

ALLERDINGS klappt das nur einwandfrei wenn ich es sozusagen "händisch" im Terminal starte.

Wenn ich das Script doppelklicke und "im Terminal ausführen" wähle, schliesst es nach dem Eintragen der ID das Terminal UND den Teamviewer.
Kann mir jemand sagen wo da der Unterschied ist?
« Letzte Änderung: 07.06.2021, 07:10:34 von van Neel »

Das Skript startet "teamviewer &" als Hintergrundprozess und läuft dann bis zum Ende durch. Danach wird das Terminalfenster automatisch geschlossen und reißt alle Kinderprozesse mit in die Tiefe, damit keine Zombies im Speicher erhalten bleiben. Du musst das Terminal also offen lassen oder ein anderes Terminal öffnen, in dem teamviewer ablaufen kann.

Guten Morgen,
schau dir dies mal an: https://wiki.ubuntuusers.de/Shell/Prozesssteuerung/
Probier mal dies:
DEINEANWENDUNG & export APP_PID=$!
disown $APP_PID
Sollte funktionieren, wenn du >Ausführen< nach doppelklick wählst..
Mit >case< sieht das viel schöner aus... ;D
Gruß
Wolfgang
« Letzte Änderung: 07.06.2021, 07:13:01 von Wolfgang58 »

Danke für Erklärung und Link. Hat mir weiter geholfen...  ;)

...
Probier mal dies:
DEINEANWENDUNG & export APP_PID=$!
disown $APP_PID
Sollte funktionieren, wenn du >Ausführen< nach doppelklick wählst..
...

Ich habe das so eingegeben im Script:
...
function tviewer
{
teamviewer & export APP_PID=$!
disown $APP_PID
sleep 5
wmctrl -a "TeamViewer"
sleep 1
for i in {0..11}
 do xte "key Tab"
 i=$i+1
done
xte "str $idnr"
}
...

Allerdings öffnet sich sichtbar gar kein Terminal bei Doppelklick und "ausführen". Ich muss schon "im Terminal ausführen" wählen.
Es funktioniert aber auch dann nicht und Script und Teamviewer werden abrupt geschlossen.

Ich habe es allerdings mit einem "wait" am Ende des Scripts gelöst.
So funktioniert das Script, zumindest für meinen Bedarf, auch wenn ich es über einen Starter   mache.

Moin,
versuch einfach mal:
teamviewer & disownGruß
Wolfgang

Auch einfach ein "disown" funktioniert nicht.
Der Teamviewer schliesst am Ende mit dem Script.

Dann versuche es mit folgender Zeile:
nohup teamviewer &

Moin,
ich habe das eben mal ausprobiert, wenn man das Script in einem Starter aufruft funktioniert das...
Schau mir das aber nochmal an und melde mich dann.
Gruß
Wolfgang

DEINEANWENDUNG & export APP_PID=$!
disown $APP_PID
das war nicht richtig, das habe ich in einem anderen Zusammenhang gebraucht...
Gruß
Wolfgang

Moin,
irgenwie ist das nicht so leicht einen Prozess so zu steuern das er mit >Doppelklick< im Terminal läuft, da dachte ich mir der Desktop ist so hübsch warum soll es dann im Terminal laufen und habe mir das folgende überlegt:
#!/bin/bash
Anna=123456
Gaby=654321
Mary=453216
i=0

function tviewer
{
teamviewer &
sleep 20
wmctrl -a 'TeamViewer'                                                               
for i in {0..11}                                   
 do
  xte "key Tab"
  i=$i+1                                 
done
xte "str $idnr"
}

auswahl=` zenity --list --width=150 --height=200 \
  --text "Bitte einen Namen wählen" --title="TeamViewer - Verbindungen" \
  --column="Name" --column="Nummer" \
    Anna 123456 \
    Gaby 654321 \
    Mary 453216 `

case "$auswahl" in
 Anna) idnr=$Anna
  ;;
 Gaby) idnr=$Gaby
  ;;
 Mary) idnr=$Mary
  ;;
    *) exit
esac
 
tviewer

Da braucht man bei >Doppelklick< nicht das Terminal, sondern >Ausführen<  anklicken oder aber mit einem >Starter< starten...
Gruß
Wolfgang
Nachtrag: Im Angang ist eine verbesserte Version, da wird berücksichtigt das >TeamViewer< schon läuft!
« Letzte Änderung: 12.06.2021, 05:28:06 von Wolfgang58 »

Diese Abfrage sieht natürlich chic aus im Gegensatz zu "dialog".

Aber es funktioniert nicht richtig.
Der Teamviewer startet VOR der Abfrage, und das Ergebnis der Frage wird nicht mehr weitergegeben. (jedenfalls bei mir)
Aus irgendeinem Grund dauert es einfach einige Sekunden bis die Abfrage überhaupt erscheint. Und der Teamviewer wird schon VORHER gestartet.

Ausserdem gefällt mir beim Terminal (dialog) ausnahmsweise , dass es den Teamviewer am Schluss auch wieder ganz schliesst, so das man nicht nochmal in der Taskleiste nachhaken muss. Ich will ihn nämlich gar nicht dauernd im Hintergrund haben.

Hier nochmal mein Script, so wie es auch funktioniert.
#!/bin/bash
# Teamviewer-Verbindungs-Auswahl
#

annette=111111
sophie=222222
claudia=333333
i=0

function tviewer
{
teamviewer &
sleep 5
wmctrl -a "TeamViewer"
sleep 1
for i in {0..11}
  do xte "key Tab"
  i=$i+1
done
xte "str $idnr"
}

auswahl=`dialog --cancel-label "Leerstart" --radiolist "verbinden mit ..." 0 0 3\
  Annette "" ON\
  Sophie "" off\
  Claudia "" off 3>&1 1>&2 2>&3`
dialog --clear
clear

case "$auswahl" in
  Annette) idnr=$annette
  ;;
  Sophie) idnr=$sophie
  ;;
  Claudia) idnr=$claudia
  ;;
esac

tviewer

wait
Natürlich wäre diese "zenity"-Auswahl optisch schöner, aber vielleicht komme ich ja noch drauf wie man die einbaut.
« Letzte Änderung: 11.06.2021, 19:24:39 von van Neel »

Guten Morgen,
was da passiert ist kann ich dir nicht sagen, wenn ich aus meinem Post den Code kopiert habe hat es bei mir auch nicht funktioniert obwohl beide Dateien gleich aussahen ABER! die waren unterschiedlich groß. Ein Vergleich mit >diff< brachte erhebliche Differenzen obwohl die nicht sichtbar waren.
Ich kann mir das nicht erklären...  :o
Ich hab das nochmal frisch rein kopiert!
Packe die Datei aber auch in die Anlage.
Nun zu den anderen Punkten:
Das Problem warum das so lange dauert liegt daran, dass das ganze ein >Timing-Problem< hat und zwar ist das so >(auch bei deinem Script) wenn die Internetgeschwindigkeit sehr, sehr langsam wird (oder auch der Rechner nicht der schnellste ist) braucht Timeviewer lange bis zur Initialisierung und erst nach dem kompletten Start von Timeviewer werden die >xte 'key tab'< ausgewertet. Da hier bei mir zur Zeit unheimliche Probleme mit dem Internet bestehen hatte ich die Wartezeit in Zeile 10 auf 20sek gesetzt, schöner wäre auszuwerten wann >TeamViewer< vollständig betriebsbereit ist... :)
Das Teamviewer nach beenden in der Taskleiste weiterhin aktiv ist, ist das Standardverhalten von Teamviewer. Bei deinem Script wir der Teamviewer mit Beendigung des Script "abgwürgt". Eine saubere Lösung wäre hier ein Programmgesteuertes beenden von Teamviewer.
Gruß
Wolfgang
« Letzte Änderung: 12.06.2021, 06:32:15 von Wolfgang58 »

Naja, bei mir ist das Netz stabil um die 30000KBits/s und ich nutze ein ERAZER Gaming Notebook X7857.

Bei dem Zenity-Script verhält es sich aber so:
Ich starte es und dann kommt sofort der Teamviewer und erst wenn der schon eindeutig "da" ist kommt nach Sekunden die Zenity-Abfrage.

Beim Dialog habe ich das von dir erwähnte Timing Problem und deshalb beim Viewerstart auch die 5 Sek. Pause eingebaut.
Allerdings kommt beim Dialog auch immer zuerst die Abfrage, und wenn ich da was auswähle wird erst der Viewer gestartet.

Ich habe das Zenity-Script jetzt mal ohne Function gemacht:
#!/bin/bash
Anna=123456
Gaby=654321
Mary=453216
i=0

auswahl=` zenity --list --width=150 --height=200 \
  --text "Bitte einen Namen wählen" --title="TeamViewer - Verbindungen" \
  --column="Name" --column="Nummer" \
    Anna 123456\
    Gaby 654321 \
    Mary 453216 `

case "$auswahl" in
 Anna) idnr=$Anna
  ;;
 Gaby) idnr=$Gaby
  ;;
 Mary) idnr=$Mary
  ;;
    *) echo "Abbruch"
       exit
esac

teamviewer &
sleep 10
wmctrl -a 'TeamViewer'                                                               
for i in {0..11}                                   
 do
  xte "key Tab"
  i=$i+1                                 
done 
xte "str $idnr"

Dann funktioniert es zwar zeitlich richtig, erst die Abfrage, dann Teamviewerstart, - ABER jetzt werden die XTE-Befehle nicht ausgeführt :-(
Ich verstehe langsam nur noch Bahnhof ;-)

Moin,
hast du die Datei aus dem Anhang genommen?
Habe gerade mal aus diesem Post https://www.linuxmintusers.de/index.php?topic=69470.msg901044#msg901044 das Script kopiert und in eine neu Datei eingefügt, die Ausführbar gemacht und gestartet - läuft wie erwartet...!!
Gruß
Wolfgang
« Letzte Änderung: 12.06.2021, 10:31:21 von Wolfgang58 »