#1 Le 19/12/2020, à 16:59
- cristobal78
(résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonjour,
Je suis tombé par hasard sur ce post de 2013 de shanx
https://forum.ubuntu-fr.org/viewtopic.php?id=1336521
dans lequel il montre comment envoyer depuis un PC source un message s'affichant sur l'écran d'un PC distant
J'ai essayé et ça marche.
Donc j'ai voulu m'en inspirer pour mettre la propo de shanx dans un script :
#!/bin/bash
ssh 192.168.0.15
export DISPLAY=:0.0
zenity --info --text "Hello World"
Mais ça ne marche pas.
Tout ce que ça fait c'est de me logguer sur le PC cible (192.168.0.15) mais ça s’arrête là, avec le prompt correct mais c'est tout. Les 2 lignes suivantes du script ne s'exécutent pas.
Y a un truc qui m'échappe mais quoi ?
__________________
Note
shanx, dans sa signature, donne un lien qui permet de voir sa folle randonnée de 2018 de 5 mois à pied au travers des USA.
Ses photos sont superbes.
Chapeau le randonneur !
Dernière modification par cristobal78 (Le 08/01/2021, à 19:02)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#2 Le 19/12/2020, à 17:17
- pingouinux
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonjour,
Il faut d'abord te connecter avec la première commande.
Tu tapes ensuite les commandes suivantes dans la fenêtre où tu es connecté.
Hors ligne
#3 Le 19/12/2020, à 19:37
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonjour
Essaye plutôt avec ce script :
#!/bin/bash
ssh 192.168.0.15 bash -s <<FINSSH
export DISPLAY=:0.0
zenity --info --text "Hello World"
FINSSH
Dernière modification par MicP (Le 19/12/2020, à 19:39)
Hors ligne
#4 Le 19/12/2020, à 19:44
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Salut pingouinux
oui ça je sais et d'ailleurs je le disais dans mon post "...J'ai essayé et ça marche..."
Ce que je me demande c'est pourquoi le script lui ne marche pas alors qu'il fait -à priori- la même chose que ce que je fais "à la main".
Pourquoi est ce que tout s’arrête avec une fenêtre de terminal et le prompt ?
Pourquoi les instructions export DISPLAY et la Cde zenity ne sont-elles pas prises en compte ?
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#5 Le 19/12/2020, à 20:06
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Salut MicP
je viens de voir ta propo de script.
Aussitôt testée avec succès. Donc merci à toi aussi.
Comme je n'ai pas tout compris de ton script j'ai commencé par remplacer FINSSH par TOTO et ça a marché pareil.
FINSSH serait-il un objet bizarre, genre catalyseur dont les astucieux maîtres du codage ont le secret ?
Je lis bash -s mais la lecture du man ne m'a pas permis de comprendre ce -s.
A moins que cela ne veuille signifier au PC distant qu'on va solliciter son bash à lui à la place de celui du PC source ?
J'ai aussi remarqué que sur le terminal "source" le script ne s'achève pas, reste en suspens et semble attendre que le message au PC distant envoyé soit validé par l'utilisateur du PC distant.
Sinon il reste l'option Ctrl-c pas très élégante pour arrêter le script et fermer la connexion ssh et reprendre la main.
Dernière modification par cristobal78 (Le 19/12/2020, à 20:10)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#6 Le 19/12/2020, à 20:12
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
…il fait -à priori- la même chose que ce que je fais "à la main". …
Non, parce que quand tu tapes les lignes à la main,
tu oublies que tu lances la ligne de commande ssh depuis une machine,
mais les lignes de commandes que tu tapes une fois connecté, seront exécutées sur la machine à laquelle tu viens de te connecter.
Tandis que dans ton script,
tu te connectes par ssh à l'autre machine
puis, quand la connexion ssh est terminée,
les lignes de commandes qui suivent dans le script sont lancées,
mais sur la machine locale, puisque la connexion ssh est terminée.
=======
Avec le script que je t'ai proposé,
une fois la connexion établie,
un shell (bash) est lancé sur la machine distante,
et la suite des commandes qui seront lancées par ce shell
seront lues par son flux stdin (option s)
et cette suite de lignes de commandes est dans un here document
elles seront dont exécutées sur la machine distante (192.168.0.15)
=======
… le script ne s'achève pas, reste en suspens et semble attendre …
Le script exécute la ligne de commande zenity
et la commande zenity ne sera terminée que quand quelqu'un aura cliqué sur le bouton de la boîte de dialogue affichée sur la machine distante.
Une fois que quelqu'un aura cliqué, la commande zenity aura terminé son exécution,
et le shell qui l'avait lancée n'aura plus rien à faire, alors la connexion ssh sera fermée
et donc, le script aura terminé son exécution.
Dernière modification par MicP (Le 19/12/2020, à 20:34)
Hors ligne
#7 Le 20/12/2020, à 17:11
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Merci MicP pour tes explications parfaitement claires.
Pour ce qui est des 2 premiers paragraphes de ton post j'avais soupçonné qq-chose comme ça mais sans arriver à vraiment comprendre. Maintenant grâce à toi c'est fait.
Clair aussi ton 3-ème paragraphe.
Pour ce qui est des "here document" alors là c'est une révélation. Dans les livres que j'ai (Celui de Eric Sanchis ou celui de Frederick Lang sur la programmation ) on en parle absolument pas.
Dans l'Advance Bash scripting guide de Mendel Cooper on en parle dès la page 19 et de nombreuses fois ensuite dans des scripts mais ... on ne définit la notion de "here document" qu'à la page 443 ce qui est pour le moins anti pédagogique.
Par ailleurs les exemples de script qu'on trouve dans ce guide sont bcp trop sophistiqués pour permettre de comprendre l’intérêt de ces "here document".
-------------------------------
Pour info j'ai suivi ton lien :
https://fr.wikipedia.org/wiki/Here_document
j'ai testé le premier exemple copié/collé :
tr a-z A-Z <<FIN
> oui oui oui c est moi Belzébuth !
> FIN
mais il ne marche pas.
En revanche celui-ci (en enlevant les chevrons devant oui et FIN) marche
tr a-z A-Z <<FIN
oui oui oui c est moi Belzébuth !
FIN
Une erreur sur le wiki ?
Enfin je constate que :
echo "oui oui oui c est moi Belzébuth !" |tr a-z A-Z
donne le même résultat avec une syntaxe que je trouve plus facile à comprendre.
Sans doute y a t il des cas où un "here document" est plus puissant/efficace qu'un "echo" ?
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#8 Le 20/12/2020, à 17:38
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonjour
… j'ai testé le premier exemple copié/collé :
tr a-z A-Z <<FIN > oui oui oui c est moi Belzébuth ! > FIN
mais il ne marche pas. …
Cet exemple est affiché
tel qu'il le serait dans une fenêtre de terminal
quand ces trois lignes sont consécutivement entrées en ligne de commande.
Voilà ce que ça donne sur ma machine :
michel@ubuT450:~$ tr a-z A-Z <<FIN
> oui oui oui c est moi Belzébuth !
> FIN
OUI OUI OUI C EST MOI BELZéBUTH !
michel@ubuT450:~$
Le caractère > qui s'affiche à partir de la deuxième ligne
est le prompt qui est défini dans la variable PS2
michel@ubuT450:~$ echo $PS2
>
michel@ubuT450:~$
Dernière modification par MicP (Le 20/12/2020, à 17:48)
Hors ligne
#9 Le 21/12/2020, à 00:33
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Ok j'ai compris ta remarque.
Mais maintenant j'ai un autre petit pb.
Pour info le PC distant a 2 comptes : "moi" et "elle" et je ne lance le code que depuis mon compte user "moi".
ssh moi@192.168.0.15 bash -s <<FINSSH
export DISPLAY=:0.0
zenity --info --text "Hello World"
FINSSH
Résultat : Le message "Hello world" s'affiche sur le PC distant dans une session ouverte avec "moi" comme user.
Mais si je tente d'envoyer le même message vers le PC distant pour le compte "elle" :
ssh elle@192.168.0.15 bash -s <<FINSSH
export DISPLAY=:0.0
zenity --info --text "Hello World"
FINSSH
Résultat : le message ne s'affiche pas sur le PC distant
tandis que sur mon terminal (PC source) j'ai ce message
No protocol specified
Unable to init server: Impossible de se connecter : Connexion refusée
Dernière modification par cristobal78 (Le 21/12/2020, à 02:41)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#10 Le 24/12/2020, à 00:57
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
J'ai essayé de comprendre le sens du message :
No protocol specified
Unable to init server: Impossible de se connecter : Connexion refusée
en mettant ça dans un moteur de recherche mais je ne m'y retrouve pas. Il semble que ce message puisse survenir dans bcp de cas.
Je suis même tombé sur un post datant d’août 2018 de ... MicP sur le site debian-fr.org qui pourrait se rapprocher de mon pb mais la discussion est trop "hard" pour moi (xhost +si ??) et donc je n'ose pas m'aventurer la dedans sans guide.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#11 Le 24/12/2020, à 04:51
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonjour
Vérifie d'abord que tu peux établir une simple connexion ssh
vers le compte utilisateur elle de la machine à l'adresse IP 192.168.0.15
ensuite, pour que la commande zenity puisse s'exécuter
il faudra que le compte utilisateur elle ait une session graphique ouverte.
Dernière modification par MicP (Le 24/12/2020, à 04:55)
Hors ligne
#12 Le 24/12/2020, à 20:02
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Hello MicP
Pour info j'ai utilisé "moi" et "elle" dans les post précédents pour simplifier mais en fait "moi" c'est jcc avec ip locale 192.168.0.19, et "elle" c'est dan avec ip 192.168.0.15
Ce point éclairci voici le retour des cdes suggérées :
1- connexion ssh
ssh 192.168.0.15
jcc@192.168.0.15's password:
Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-197-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
Last login: Thu Dec 24 17:12:47 2020 from 192.168.0.19
jcc@ldlc15p:[$~]>
2- changement de user
jcc@ldlc15p:[$~]> cd /home/dan/
3- essai de zenity depuis le compte dan (avec sa messagerie T'Bird à l'écran donc session graphique ouverte)
jcc@ldlc15p:[$/home/dan]> zenity --info --text "Hello World"
Failed to connect to Mir: Failed to connect to server socket: Aucun fichier ou dossier de ce type
Unable to init server: Impossible de se connecter : Connexion refusée
(zenity:14338): Gtk-WARNING **: cannot open display:
jcc@ldlc15p:[$/home/dan]>
Et bien sur : Joyeux Noël à toi.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#13 Le 24/12/2020, à 21:22
- Sciensous
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
zenity étant en mode graphique, il faut indiquer le partage du serveur X à la première ligne par -X:
ssh -X 192.168.0.15
ensuite si c'est pour mettre une message à dan, il faut se connecter sous dan et non uniquement changer de chemin:
ssh -X dan@192.168.0.15
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#14 Le 25/12/2020, à 01:14
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
salut sciensous
j'ai introduit ta modif et ça marche .. enfin presque.
En effet pour faire des essais plus facilement j'ai connecté le pc source à un troisième PC, distant lui aussi, mais posé sur la même table (que le source), d'adresse ip filaire 10.0.0.12.
Comme ça je n'ai plus à me déplacer pour voir le message s'afficher (ou non) sur le pc distant.
J'ai donc repris la propo de MicP et introduit ta modif :
jcc@dellfixe:[$~]> ssh -X dan@10.0.0.12 bash -s <<FINSSH
> export DISPLAY=:0.0
> zenity --info --text "Hello World"
> FINSSH
dan@10.0.0.12's password:
Gtk-Message: 01:01:50.867: GtkDialog mapped without a transient parent. This is discouraged.
jcc@dellfixe:[$~]>
et le miracle s'accomplit : j'ai bien "Hello world" sur l'écran du pc distant connecté au compte user "dan".
Génial.
Maintenant convaincu qu'à tous les deux, MicP et toi, vous avez résolu mon pb, je reteste les cdes avec le pc distant du début (ip en wifi 192.168.0.15).
Mais là ça ne va plus :
jcc@dellfixe:[$~]> ssh -X dan@192.168.0.15 bash -s <<FINSSH
export DISPLAY=:0.0
zenity --info --text "Hello World"
FINSSH
dan@192.168.0.15's password:
Invalid MIT-MAGIC-COOKIE-1 keyFailed to connect to Mir: Failed to connect to server socket: Aucun fichier ou dossier de ce type
Unable to init server: Impossible de se connecter : Connexion refusée
(zenity:16677): Gtk-WARNING **: cannot open display: :0.0
jcc@dellfixe:[$~]>
Or j'ai l'habitude d'envoyer des vers et depuis n'importe lequel de ces 3 PC dans tous les sens et ça marche toujours.
Il manque quelque chose, mais quoi ?
C'est trop c.. on y était presque
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#15 Le 25/12/2020, à 01:32
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
je me réponds à moi même
sur ce site
https://ubuntuplace.info/questions/2266 … artir-du-t
j'ai vu qq'un proposer de remplacer
export DISPLAY=:0.0
par
export DISPLAY=:1
et ça a marché mais avec :1 ça ne marche plus sur l'autre pc
Pourquoi donc ? Que signifie DISPLAY=:1 ou 0 ???
Dernière modification par cristobal78 (Le 25/12/2020, à 01:50)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#16 Le 06/01/2021, à 01:38
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonne année aux amis du forum.
Sans réponses de la part de mes "helpers" préférés (pour cause de fêtes bien arrosées sûrement ) et après multiples essais, j'ai opté pour une solution horrible mais qui a l'air de marcher.
Après ces essais il m'a semblé que la variable DISPLAY du PC prend la valeur 0 pour le 1-er user connecté et la valeur 1 pour celui qui se connecte ensuite.
Mais est ce vrai ???
En tout cas sur la base de cette hypothèse, hasardeuse j'en conviens, j'ai essayé de contourner l'obstacle en faisant 2 commandes export DISPLAY=: l'une derrière l'autre.
De cette manière je me dis que si la 1-ere valeur pour DISPLAY n'est pas bonne sans doute la 2-eme le sera.
Ce qui donne les lignes de script suivantes dans lesquelles, en amont dans le script, j'ai défini les variables "user", "ip"
.......
.....
message=$(zenity --entry --width=300 --height=100 --title="" --entry-text="Tapez ici le texte du message")
ssh -X "$user"@"$ip" bash -s <<FINSSH
export DISPLAY=:0.0
zenity --info --text "$message"
export DISPLAY=:1
zenity --info --text "$message"
FINSSH
Le pire c'est que ça marche !
Mais est-ce la bonne solution ?
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#17 Le 07/01/2021, à 08:16
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Bonjour
Si dans ton script, des valeurs ont été assignées aux variables user et ip,
et si le compte dont le nom est dans la variable user
a bien une session graphique ouverte sur la machine distante dont l'adresse IP est dans la variable ip
tu pourrais faire simplement :
…
ssh $user@$ip DISPLAY=:0.0 zenity --info --text \'$(zenity --entry --width=300 --height=100 --entry-text="Tapez ici le texte du message")\'
=======
Pour info, l'option X de la commande ssh n'est utile que si l'ont voulait faire du X11 forwarding (déport d'affichage)
Le X11 forwarding permet de faire afficher sur la machine locale (celle sur laquelle a été lancée la commande ssh)
la fenêtre d'une application graphique qui s'exécuterait sur une machine distante (celle à laquelle on s'est connecté par ssh)
ce qui n'est pas ce que tu veux faire.
=======
Pour la variable DISPLAY
voir : askubuntu -> What is the $DISPLAY environment variable?
Une machine peut être équipée de plusieurs écrans,
une session X peut avoir plusieurs écrans à gérer,
et il peut y avoir plusieurs sessions X ouvertes en même temps sur la même machine.
Donc, suivant la machine, l'environnement de bureau,
et la ou les applications que le compte utilisateur est en train de visualiser,
et l'écran sur lequel tu veux que le message soit affiché,
la valeur de la variable DISPLAY sera différente.
Dernière modification par MicP (Le 07/01/2021, à 08:58)
Hors ligne
#18 Le 08/01/2021, à 01:16
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Salut MicP
- J'ai testé ta nouvelle ligne de Cde qui n'a pas voulu marcher avec DISPLAY=:0.0 ... mais qui a marché avec DISPLAY=:1.0
Ce qui me ramène tjrs à la même question : comment savoir à l'avance si c'est DISPLAY=:0 ou bien DISPLAY=:1 qui marchera.
- Merci pour les explications ccn l'option -X de ssh.
Ce que tu évoques semble être la prise en main à distance du pc.
Mais comme ce que je veux faire c'est simplement, depuis le pc "local", afficher un message sur un PC distant (qui n'utilise qu'un écran) j'ai compris l'inutilité de l'option -X
- Merci pour le lien (askubuntu) concernant la variable DISPLAY.
- Finalement comme ta cde me paraissait un peu "compacte" et que je n'étais pas trop sur de pouvoir la comprendre plus tard je l'ai un peu modifiée comme suit :
user="dan" ; ip="10.0.0.12"
textedumessage=$(zenity --entry --width=300 --height=100 --title="Fenêtre de saisie de message" --text="Tapez ici votre texte") ; ssh $user@$ip DISPLAY=:1 zenity --info --width=500 --title="Ce\ message\ est\ pour\ vous" --text="$textedumessage"
En tout cas ça marche.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#19 Le 08/01/2021, à 08:21
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
…comment savoir à l'avance si c'est DISPLAY=:0 ou bien DISPLAY=:1 …
Ça dépend de la machine, de la ou des cartes graphiques qui y sont installées, du ou des serveurs X qui tournent sur la machine, du nombre d'écrans qui y sont connectés, du système d'exploitation utilisé, du gestionnaire de connexion utilisé, de l'environnement de bureau utilisé, de comment le ou les utilisateurs de la machine ont paramétré leur système, de la ou des applications que le ou les utilisateurs ont lancé, de la façon dont elles ont été lancées, de l'écran où tu veux que le message s'affiche, … et j'en oublie sans doute.
Dernière modification par MicP (Le 08/01/2021, à 08:28)
Hors ligne
#20 Le 08/01/2021, à 18:26
- cristobal78
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
En fait ça ne marchait pas si bien que ça car je n'avais pas "échappé" les double quote dans la cde zenity --entry.
La conséquence c'est que la cde zenity --info n'affichait que le premier mot de la chaine saisie.
Donc le code devient:
user="dan" ; ip="10.0.0.12"
textedumessage=\"$(zenity --entry --width=300 --height=100 --title="Fenêtre de saisie de message" --text="Tapez ici le texte du message")\"
ssh "$user"@"$ip" DISPLAY=:1 zenity --info --width=500 --title="Ce\ message\ est\ pour\ vous" --text="$textedumessage"
ssh "$user"@"$ip" DISPLAY=:0 zenity --info --width=500 --title="Ce\ message\ est\ pour\ vous" --text="$textedumessage"
- si la valeur de DISPLAY est :1 tout va bien
- si la valeur de DISPLAY est :0 alors la 1-ère commande plante et pour exécuter la seconde le prompt demande une nouvelle saisie du mot de passe et tout va bien.
Tout ça pour envoyer un message à une personne de mon réseau local travaillant à l’autre bout de la maison
Merci MicP pour tes commentaires pédagogiques.
Je passe en résolu.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#21 Le 08/01/2021, à 18:39
- Hizoka
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Pour voir la liste des DISPLAY :
cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#22 Le 08/01/2021, à 18:56
- MicP
Re : (résolu)lancer un script depuis PCsource pour affichage sur PCdistant
Pour voir quelle valeur de la variable DISPLAY est utilisée par chacune des applications lancées :
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '(.*)' $file/stat; done | sed 'N;s/\n/\t/'
Dernière modification par MicP (Le 09/01/2021, à 10:31)
Hors ligne