/ / SSH, écran et XDISPLAY - linux, ssh, gnu-screen

SSH, screen et XDISPLAY - linux, ssh, gnu-screen

J'utilise screen pour conserver ma session de travail et me connecter à la même session à partir de plusieurs machines. Comment puis-je configurer SSH et écran de sorte que la variable XDISPLAY à l'intérieur ma session d'écran persistante est toujours définie sur la machine à partir de laquelle je me connecte actuellement?

c'est à dire.Je démarre la session écran au travail et j'utilise gvim, qui utilise le serveur X fonctionnant sur ma machine de travail. Plus tard, je me connecte à la même session depuis chez moi et je souhaite également utiliser gvim. Mais cette fois, je veux que gvim utilise le serveur X sur ma machine domestique. Je me rends compte que je pourrais mettre à jour manuellement XDISPLAY chaque fois que je me connecte à partir d'une machine différente, mais je préfère avoir un système automatisé.

Des points bonus si je peux réellement bouge toi gvim de ma machine de travail vers ma machine domestique pendant son exécution. J'ai essayé xmove mais n'a jamais pu le faire jouer gentil.

Réponses:

5 pour la réponse № 1

Ce qui suit est une solution manuelle, mais il n'y a aucune raison que vous ne puissiez pas utilisez un alias ou un script pour le faire automatiquement lorsque vous vous connectez à distance.

En supposant que votre shell local définit la variable DISPLAY de manière appropriée, tu pourrais utiliser screen -X pour envoyer les commandes suivantes à votre écran distant avant de liaison.

# set future remote shells started by screen to have the correct XDISPLAY
% screen -X "setenv XDISPLAY $DISPLAY" #...

# set up the keystroke F1 to update the XDISPLAY in current shells
% screen -X "bindkey -k k1 stuff export XDISPLAY=$DISPLAY15" #...

Si vous savez que toutes vos fenêtres ont été laissées dans un shell (pas un éditeur en cours d'exécution ou autre), vous pouvez utiliser :at pour changer le XDISPLAY plutôt qu'une liaison de clé:

# update the XDISPLAY in all current windows
% screen -X "at % stuff export XDISPLAY=$DISPLAY15" #...

Alternativement, si vous connaissez un moyen d'attraper unla valeur de la variable d'environnement du processus parent, alors vous pouvez l'utiliser avec le hook d'invite de votre shell pour saisir la valeur SCREEN de XDISPLAY (telle que définie par setenv) et la mettre à jour pour le shell.


3 pour la réponse № 2

Il n'y a pas de moyen "trivial" de modifier les variables d'environnement dans les processus étrangers.

Une solution simple pourrait consister à maintenir votre XDISPLAY dans un fichier lors de la connexion et utilisez un PROMPT_COMMAND pour lire ce fichier avant d'imprimer l'invite suivante.


Pour déplacer des applications X, regardez quelque chose comme X11vnc ou Xvnc.


0 pour la réponse № 3

Je suis également intéressé par la réponse à ce sujet. Ne devrait-il pas être possible de répertorier les processus SSH de votre utilisateur triés par heure et de déterminer l'environnement de ce processus peut-être?