X11 Forwarding over Gnu Screen, est-ce possible?


32

J'utilise GNU Screen constamment. Mais j’essaie de savoir s’il est possible de faire passer les applications X11 à l’écran lorsque je suis ssh-ing (est-ce un mot?). Actuellement, si j'essaie d'exécuter «gedit» via l'écran, il s'ouvre sur mon ordinateur «serveur» et non sur mon client. Si je fais la même chose en dehors de l'écran, alors tout va bien. Mais je veux que tout se passe bien quand j'utilise aussi l'écran!

Merci!

PS: J'ai cherché le problème sur Google et je vois mention de xmove, mais je n'arrive pas à trouver le paquet contenant xmove sur mon Ubuntu. (Ubuntu 10.10)


Je n'ai pas le temps de trouver une réponse complète maintenant, mais vous avez besoin de définir certaines variables d'environnement correctement. Vous pouvez probablement trouver lesquels en regardant votre environnement en dehors de l'écran.
Janv

Réponses:


32

Pour faire cela manuellement, une fois que vous avez SSHed, mais avant de vous reconnecter à l'écran, vérifiez votre variable d'environnement DISPLAY:

echo $DISPLAY

Une fois que vous vous êtes reconnecté à l'écran, définissez explicitement la variable d'environnement:

export DISPLAY=:N.0

: N.0 est ce qui a été echomontré avant l'attachement. Cela ne sera pas parfait, car certaines applications peuvent s’attendre à communiquer avec le D-Bus de session, qui est un peu plus complexe à envoyer sur la connexion SSH.


1
Impressionnant! Cela semble fonctionner pour la plupart des applications. J'essaye de monter mon écran 'fu'. Avez-vous des idées ou pouvez-vous au moins m'indiquer comment je peux automatiser cela? Merci!
Sandro

J'ai fait des choses bizarres comme écrire un script comme: echo $DISPLAY > $HOME/.display.txt; screen -x -det puis un autre à l'écran pour le faire tournerexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

C'est exactement ce que j'ai essayé d'accomplir. Mais jusqu'ici pas de chance. Essayer de réussir cette exportation est tout un obstacle, car son exécution dans un script n’est pas une bonne chose, j’ai besoin de la trouver en quelque sorte ... et setenv ne semble pas non plus avoir le contact magique qui soit.
Sandro

Pour trouver le type de script . /path/to/scriptscriptestexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

Cela suppose que vous n'avez pas de démarrage automatique de l'écran lors de la connexion (à la byobu)
Un étudiant dans une université

11

il y a un programme appelé xpra dans les dépôts, c'est comme un écran GNU pour x11. ce n'est pas trop dur de travailler avec:

X applications distantes persistantes

Xpra vous offre les fonctionnalités de GNU Screen for X applications.

Il permet à l'utilisateur de visualiser les applications X distantes sur leur ordinateur local, de se déconnecter et de se reconnecter à partir de l'ordinateur distant sans perdre l'état des applications en cours d'exécution.


2
J'ai écrit sur la manière d'intégrer réellement xpra à Screen pour obtenir la persistance des applications console et X11: krlmlr.github.io/integrating-xpra-with-screen . Travaille pour moi.
krlmlr

7

Byobu rattache automatiquement les agents ssh et gpg. Je pourrais le faire rattacher la variable d'affichage à, si cela vous aide ...


Il ne semble même pas transmettre la variable d'affichage dans les nouvelles sessions créées dans une session ssh avec transfert X11. Ce serait merveilleux si c'était le cas ... J'ai arrêté de l'utiliser parce que je devais désactiver le démarrage automatique de Byobu pour pouvoir utiliser le transfert X11.
Un étudiant dans une université le

2

C'est comme ça que je l'ai fait fonctionner quand je faisais du byobu

Ajoutez cette ligne dans .bash_login avant la ligne "_byobu_source ..":

echo $DISPLAY > $HOME/.display.env

Et puis ajoutez cette ligne à .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

Il semble que le problème est que la variable d'environnement XAUTHORITY n'est pas conservée dans la session d'écran. J'ai résolu ce problème en ajoutant ce qui suit à mon .bashrc. Je ne pensais pas que cela devrait être nécessaire, mais je suppose que vous faites ce que vous devez:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

Je ne m'attends pas à ce que ce soit la meilleure solution, ni la plus concise, mais cela fonctionne.



0

Sur la base de la suggestion de @harre, j’ai trouvé que cette solution fonctionnait le mieux, du moins pour RHEL via Putty. Je sais qu'il existe un meilleur moyen que de créer un fichier contenant le fichier var, mais cela fonctionne en dehors de la porte pour pouvoir X11accéder au fichier DISPLAYchargé gnu screen.

Solution automatisée

Ajouter à .bashrc(ou .bash_profileselon votre cas d'utilisation)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Ajoutez ensuite le fichier suivant (ou votre choix de chemin)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.