web-dev-qa-db-fra.com

X11 Forwarding over Gnu Screen, est-ce possible?

J'utilise GNU Screen en permanence. Mais, j'ai essayé de savoir s'il y avait un moyen de faire passer les applications X11 sur 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 une mention de xmove, mais je n'arrive pas à trouver le paquet contenant xmove sur mon Ubuntu. (Ubuntu 10.10)

32
Sandro

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. est ce que le echo a montré 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.

32
Kees Cook

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 pour les applications X.

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.

11
Avihay

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

7
Dustin Kirkland

C’est comme ça que j’ai fonctionné lors de l’exécution de byobu

Ajoutez cette ligne dans . Bash_loginavant la ligne "_byobu_source ..":

echo $DISPLAY > $HOME/.display.env

Et ajoutez ensuite cette ligne à . Bashrc:

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

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.

1
Mark

Sur la base de la suggestion de @harre, j’ai trouvé cette solution la plus efficace, du moins pour RHEL via PuTTY. Je sais qu'il existe un meilleur moyen que de créer un fichier contenant la var, mais cela fonctionne en dehors de la porte pour que X11 puisse accéder au DISPLAY lorsqu'il est chargé via gnu screen.

Solution automatisée

Ajouter à .bashrc (ou .bash_profile, selon 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
0
Brian Thomas

FreeNX est une application formidable pour travailler avec des affichages à distance.

0
Habitual