Méthode en ligne de commande pour envoyer des frappes à une fenêtre ouverte sur une autre session X

11

Sur ma machine principale, j'ai un bureau Ubuntu ouvert et connecté. Je me connecte ensuite également à cette machine à partir d'un ordinateur distant, en utilisant X2go qui crée une nouvelle session X. J'ai un fichier libreoffice ouvert sur la session d'origine . Je veux enregistrer ce fichier et le fermer - mais depuis la machine distante! (Les deux sessions ont le même utilisateur connecté; je peux sudo si nécessaire)

J'ai essayé d'utiliser xdotool searchmais cela ne trouve pas la fenêtre. Y a-t-il un moyen de faire ce que je veux de cette deuxième session? Je peux voir le processus avec ps -A Je peux même voir le fichier ouvert avec lsof! Comment puis-je faire une "sauvegarde et fermeture" dessus?

Sanjay Manohar
la source
2
Vous pouvez simplement tuer le processus - si vous n'avez pas de modifications sérieuses non enregistrées, ce serait simple. Si vous le faites, il devrait toujours essayer de récupérer le document la prochaine fois que vous l'ouvrirez.
Wayne Werner
C'est vrai @wayne, il serait probablement récupéré automatiquement ... Merci pour la suggestion. Je ne sais pas si je voulais saisir cette chance! Pas moyen d'envoyer des touches (ou tout autre message direct)? Cela semble si simple.
Sanjay Manohar
Je suis sûr qu'il existe des moyens - je ne les connais tout simplement pas. Certains compliqués impliquent l'installation d'un client VNC simple et la configuration DISPLAY=:0(ou tout affichage sur lequel votre autre compte se trouve), puis lancez le serveur et accédez-y depuis le client. Mais cela pourrait être excessif. LibreOffice peut avoir un protocole de message - je ne le connais pas très bien car j'utilise Google Docs ou des fichiers texte en clair dans Vim (y compris LaTex) ...
Wayne Werner
utiliser VNC pour accéder à la fenêtre principale depuis un autre emplacement
Olivier Dulac
1
xdotool s'exécute sur la valeur $ DISPLAY de la session en cours. Vous pouvez ssh n'importe quelle machine ou vncserver puis exécuter xdotool dessus. Par exemple, si vous exécutez un vncserver sur le port 5901, il utilise: 1 écran par convention. Donc, exécutez DISPLAY:1puis démarrez n'importe quel programme X (xeyes pour le test) et fonctionneriez sous le VNC. Il en va de même pour les serveurs vnc distants. SSH dans la machine, puis exécutez l'exportation simple AFFICHER: 1 avant de l'utiliser.
m3nda

Réponses:

9

En supposant la configuration par défaut, xdpyinfo sur "original" afficherait un affichage de ": 0.0", par exemple

xdpyinfo | grep name

Si votre variable d'environnement DISPLAY sur "x2go" est ": 1.0", il devrait en être ainsi.

Depuis un terminal sur "x2go" Essayez de trouver l'id de la fenêtre:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

Il est possible que le contrôle d'accès soit configuré de manière à ce qu'il ne fonctionne pas, mais je pense qu'il devrait l'être si vous êtes le même ID utilisateur sur le même hôte (c'est-à-dire l'accès à ~ / .Xauthority). Vérifiez la sortie "xauth list" si aucun accès.

Si cela fonctionne, utilisez votre outil préféré pour le contrôler. Ajoutez "-int" à xwininfo ci-dessus pour imprimer le windowid en décimal si votre outil l'exige de cette façon, xdotool ne fait pas:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

ou vous pourriez avoir plus de chance avec ceux-ci au lieu de "ctrl + s" / "ctrl + q"

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

Vous pourriez avoir besoin de "alt +" au lieu de "meta +", j'ai des mappages méta / alt / super non standard. meta fonctionne pour moi, testé à l'aide d'un Xnest. Je suppose que la disposition et les accélérateurs du menu anglais sont inchangés.

Il est possible qu'il y ait une fenêtre contextuelle sur votre chemin, auquel cas cela vaut la peine d'essayer:

xdotool key "Escape"

plusieurs fois, puis réessayez d'enregistrer et de fermer. Rappelez-vous que xdotool est pointilleux sur la casse exacte des noms "clés".

Vous devriez pouvoir essayer tout cela en démarrant libreoffice sur x2go et en ne modifiant PAS votre DISPLAY. Vous devez enregistrer les commandes dans un fichier de script shell afin que les changements de focus ne vous dérangent pas.

lsof devrait montrer que le fichier n'est plus ouvert s'il fonctionnait :-)

Mr Spuratic
la source
Merci pour l'indication xdotool key "Escape"sur les noms mais je n'ai pas essayé les noms longs: D
m3nda
1

Il semble qu'il y ait quelques exigences possibles. apparemment, l'hôte doit être dans le fichier xhosts (il a été marqué comme réponse) et la valeur DISPLAY appropriée exportée. Cet article ici devrait vous aider à le faire comme vous le vouliez, permettant à xdotool de trouver une fenêtre x11 distante .

Joshua K
la source