LMU - Das Hilfe Forum für Linux Mint

Software => Shell-Programmierung und Scripting => Thema gestartet von: van Neel am 06.06.2021, 22:26:19

Titel: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 06.06.2021, 22:26:19
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?
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Sokoban am 07.06.2021, 05:21:31
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.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 07.06.2021, 05:28:44
Guten Morgen,
schau dir dies mal an: https://wiki.ubuntuusers.de/Shell/Prozesssteuerung/ (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
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 07.06.2021, 07:10:15
Danke für Erklärung und Link. Hat mir weiter geholfen...  ;)
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 07.06.2021, 11:10:23
...
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.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 07.06.2021, 11:55:02
Moin,
versuch einfach mal:
teamviewer & disownGruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 07.06.2021, 12:41:34
Auch einfach ein "disown" funktioniert nicht.
Der Teamviewer schliesst am Ende mit dem Script.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Sokoban am 07.06.2021, 13:56:25
Dann versuche es mit folgender Zeile:
nohup teamviewer &
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 07.06.2021, 14:14:59
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
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 07.06.2021, 16:35:51
DEINEANWENDUNG & export APP_PID=$!
disown $APP_PID
das war nicht richtig, das habe ich in einem anderen Zusammenhang gebraucht...
Gruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 08.06.2021, 11:56:41
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!
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 11.06.2021, 19:16:28
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.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 12.06.2021, 06:03:07
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
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 12.06.2021, 10:01:50
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 ;-)
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 12.06.2021, 10:25:03
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 (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
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 12.06.2021, 13:06:52
OK - das habe ich jetzt auch gemacht und ES LÄUFT :-(
Habe sogar den Sleep Wert auf 5 reduziert und einen Starter benutzt.

Ich verstehe es einfach nicht, sehe keinen Unterschied zu den Scripten die ich vorher hatte ;-)

Na egal, so sieht es noch chicer aus auf jeden Fall.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 12.06.2021, 13:23:59
Moin,
nun gibt es noch eine kleine Aufgabe und zwar, dass Teamviewer komplett geschlossen wird und sich nicht weiter in der Taskleiste einnistet.
Ich ging eigentlich davon aus das man das einstellen kann, habe diesbezüglich aber nichts gefunden.
Meine Idee dazu wäre eine Schleife einzubauen die prüft ob das Fenster geöffnet ist und wenn es geschlossen wird Teamviewer mit >kill< abzuschießen...
Gruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 12.06.2021, 13:28:38
Ja genau ;-)
Habe es schon probiert, allerdings noch nicht geschafft.
Muss mich in den kill- bzw pid-details noch einlesen.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 13.06.2021, 09:53:23
Guten Morgen,
ich habe noch ein wenig gebastelt, ist vielleicht nicht der "Stein der Weisen" aber irgendwie funktioniert es.. :)
Das Script befindet sich in der Anlage und ist wirklich als -experimental- zu betrachten, aber eventuell hast du ja Lust damit weiterzumachen es soll hauptsächlich als Denkanstoß dienen.
Über ein Feedback würde ich mich freuen...
Viel Spaß damit
Gruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 13.06.2021, 11:10:51
Ich habe es mit einer einfachen zweiten Abfrage gemacht, aber deine Lösung ist eleganter

Meine Abfrage am Ende des Scriptes:
sleep 5
zenity --question \
--title="Teamviewer"
if [ $? == 0 ]; then
  exit
else
  killall TeamViewer
fi

Ich habe vorher auch Schleifen probiert die den Prozess abfragen, aber das scheiterte daran, dass ich keinen eigenen Prozess für das geöffnete TeamViewer-Fenster gefunden habe.

Ich werde dein Script heute mal in der Praxis testen, also wirklich auch eine Verbindung machen.
Aber ich bin zuversichtlich, das die Sache meinen Vorstellungen gerecht wird.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 13.06.2021, 11:25:43
In deinem Script komme ich mit  wmctrl ja noch klar ;-) , aber mit dem awk kann ich nichts anfangen. Wo kann ich darüber etwas lesen?
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Kreuz Elf am 13.06.2021, 12:36:45
awk ist "einfach nur" dazu da, tabellenartig sortierte Daten umzumodeln / Sachen rauszufiltern.
ist so ne Art abgespeckte Tabellenkalkulation im Konsolenmodus.
im Fall von Wolfgangs Skript mit dem command
awk '{ print $4 }'wird aus den Daten, die
wmctrl -lausgibt nur die 4te Spalte über die Pipe an grep weitergeleitet.
Allgemeine Dokumentation zu awk:
https://www.grund-wissen.de/linux/shell/shell-scripting/sed-und-awk.html
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 13.06.2021, 14:08:07
Wo kann ich darüber etwas lesen?
Moin,
hier kannst du etwas darüber nachlesen: https://wiki.ubuntuusers.de/awk/ (https://wiki.ubuntuusers.de/awk/) und überhaupt ist das >wiki< https://wiki.ubuntuusers.de/Wiki/Index/ (https://wiki.ubuntuusers.de/Wiki/Index/) sehr zu empfehlen.
Gruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 13.06.2021, 14:19:59
Danke für die Infos und Erklärungen .

Ich habe das jetzt mal sozusagen "am lebenden Objekt" getestet , also auch eine Verbindung mit einem anderen Rechner hergestellt.
Leider funktioniert das nicht wie erwartet mit Wolfgangs Lösung.
Der Teamviewer wird sofort wieder komplett geschlossen, wenn ich das dazugehörige Passwort eingegeben habe, und die Verbindung sich öffnen will. :-(

Meine Fortfahren-Abfrage funktioniert.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: nudels am 13.06.2021, 14:24:13
niehm anydeks ist openscource läuft ah stabiler  ;D
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 13.06.2021, 14:29:57
Moin,
oha! Das stimmt da muss man nochmal Hirnschmalz einsetzen.
Im Script wird ja geprüft ob das Fenster von Teamviewer offen ist und wenn das geschlossen wird, wird Teamviewer abgeschossen, nun wird das aber auch geschlossen wenn eine Verbindung aufgebaut wird...
Man müsste mal schauen was nach dem Verbindungsaufbau von Teamviewer noch läuft und das dann berücksichtigen, sprich prüfen wenn das Fenster geschlossen wird und der XY-Prozess noch läuft, darf Teamviewer nicht abgeschossen werden.. naja oder so ähnlich ist nur so ins unreine gesagt...
Gruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 13.06.2021, 14:45:40
@nudels
Ich habe Anydesk unter Windows schon einmal getestet.
Den TV in portabler Version benutze ich seit vielen Jahren (allerdings unter Windows) und hatte nie Probleme.
Aber egal - der eine mag Leberwurst der andere nicht, ich glaube beide Programme machen im allgemeinen was sie sollen.

@Wolfgang58
Ich werde am Ball bleiben ;-). Habe Linux erst seit wenigen Wochen installiert (erst mal nur auf einem USB-Stick) aber ich finde mich langsam rein. ;-)
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: nudels am 13.06.2021, 14:49:56
echt auf hardware installiert läuft meist flotter  8)

nutze seit 13 jahren privat kein windows mehr  :P
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 13.06.2021, 15:05:33
echt auf hardware installiert läuft meist flotter  8)
...

Ist mir schon klar. Aber ich will es erst kennen lernen. (LM läuft auf einem flotten 128 GB USB3-Stick und ich bin sehr zufrieden mit der Geschwindigkeit.)

Vielleicht mache ich dann einmal ein Dualboot-System aus einem meiner Rechner. Aber vorher will ich wissen was mich erwartet und schon ein wenig Erfahrung mit Linux haben.
Windows benutze ich seit Version 3.0  :o und meine Rechner sind gut gepflegt und meine Softwareumgebung alt und vertraut.  ;)
Ich bin wohl eines von den Glückskindern die mit Windows nur selten Probleme hatten.
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 13.06.2021, 15:59:48
Aber zurück zum Script.
Ich habe das Script jetzt am Ende so abgeändert:
while [[ "$tvw" != "" ]]
do
sleep 1
tvw=`wmctrl -l | awk '{ print $4 }' | fgrep TeamViewer`
done
tv=`pidof TeamViewer`
kill $tv

Jetzt funktioniert auch die Verbindung. Die Fenster (3 an der Zahl) haben nämlich die Namen
"TeamViewer" , "TeamViewer Authentification" und bei der Verbindung "(Rechnername)-Teamviewer"

Das Sleep 1 braucht es damit der Teamviewer Zeit hat das Verbindungsfenster zu öffnen.

Jetzt bin ich zufrieden :-)
Auf meinem Windows habe ich übrigens auch so ein Script (VBS) allerdings brauche ich da nicht auf einen im Hintergrund geöffneten TV zu achten, da ich nur eine portable Version benutze. Das hat den Vorteil, das es keinen unbeaufsichtigten Remotezugriff geben KANN und der TV läuft nicht im Hintergrund.

Natürlich könnte man sich bei TV registrieren und die übernehmen GERNE das abspeichern von Verbindungs-IDs.
Aber wenn es sich vermeiden läßt registriere ich mich nirgendwo extra. Der sicherste Datenschutz ist immer noch das richtige Benutzerverhalten.

Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: Wolfgang58 am 13.06.2021, 18:00:36
Jetzt bin ich zufrieden :-)
Moin,
das freut mich und ich finde es toll wie gut du das umgesetzt hast...
Gruß
Wolfgang
Titel: Re: Script schliesst nach Doppelklick und bei Auswahl "im Terminal ausführen" immer
Beitrag von: van Neel am 14.06.2021, 13:40:12
Danke nochmal für die Unterstützung.
Zum Abschluss dieses Treats noch mal das komplette fertige Script:
#!/bin/bash
# Teamviewer-Start-Auswahl
#

annette=111111111
sophie=222222222
claudia=333333333

i=0
tvw="TeamViewer"

function tviewer
{
teamviewer &
sleep 5
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 "verbinden mit ..." --title="TeamViewer" \
  --column="Name" \
  --ok-label="Verbinde" \
  --cancel-label="Leerstart" \
    Annette \
    Sophie \
    Claudia `

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

tviewer

sleep 5
while [[ "$tvw" != "" ]]
do
sleep 1
tvw=`wmctrl -l | awk '{ print $4 }' | fgrep TeamViewer`
done
tv=`pidof TeamViewer`
kill $tv

Natürlich ist hier das Nutzen einer Funktion eigentlich überflüssig, aber als ich angefangen habe wusste ich das noch nicht, und es war einfach eine Newbie-Übung für mich eine anzulegen.