Quand je SSH à une boîte distante
$ ssh -X remotebox
puis démarrez Firefox sur le boîtier distant
remotebox$ firefox
et j’ai firefox fonctionnant sur ma machine locale, une fenêtre firefox locale s’ouvrira. aucun processus firefox n'est en cours d'exécution sur la boîte à distance.
Si firefox ne fonctionne pas sur ma machine locale, une fenêtre firefox distante s'ouvrira.
Pourquoi ouvre-t-il une fenêtre firefox locale? Comment puis-je empêcher cela?
Voici quelques informations supplémentaires de mon système local.
Linux lesmana-laptop 2.6.32-24-generic #42-Ubuntu SMP Fri Aug 20 14:24:04 UTC 2010 i686 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.1 LTS
Release: 10.04
Codename: lucid
DISPLAY=:0.0
Mozilla Firefox 3.6.8, Copyright (c) 1998 - 2010 mozilla.org
Informations de remotebox.
Linux dxray 2.6.22.19-0.4-default #1 SMP 2009-08-14 02:09:16 +0200 x86_64 x86_64 x86_64 GNU/Linux
LSB Version: core-2.0-noarch:core-3.0-noarch:core-2.0-x86_64:core-3.0-x86_64:desktop-3.1-AMD64:desktop-3.1-noarch:graphics-2.0-AMD64:graphics-2.0-noarch:graphics-3.1-AMD64:graphics-3.1-noarch
Distributor ID: SUSE LINUX
Description: openSUSE 10.3 (X86-64)
Release: 10.3
Codename: n/a
DISPLAY=localhost:15.0
Mozilla Firefox 3.0.14, Copyright (c) 1998 - 2009 mozilla.org
La commande suivante démarre une session firefox à distance avec une fenêtre firefox à distance.
remotebox$ firefox -no-remote
La commande suivante produit un bref délai, puis revient à Invite et une fenêtre firefox locale apparaît. Aucun processus firefox en cours d'exécution sur la remotebox.
remotebox$ firefox
Information de remotebox2.
Linux marvin 2.6.31-22-generic #60-Ubuntu SMP Thu May 27 00:22:23 UTC 2010 i686 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
DISPLAY=localhost:11.0
Mozilla Firefox 3.6.8, Copyright (c) 1998 - 2010 mozilla.org
La commande suivante sur remotebox2 démarre une session firefox distante comme prévu.
remotebox2$ firefox
Je ne sais pas pourquoi firefox sur remotebox2 démarre une session à distance au lieu d’une session locale.
en plus de firefox -no-remote
, un autre paramètre est firefox -no-xshm
, qui indique la technique utilisée pour le faire fonctionner.
La mémoire partagée X11 est une technique de communication interprocessus qui peut être utilisée par toutes les applications connectées à une session x serveur donnée. Il peut être utilisé pour effectuer un glisser-déposer et d'autres types d'interactions sur le bureau.
Il peut être (et est) également utilisé pour implémenter des applications "ouvertes une fois", afin de réduire l'encombrement (ou le nombre de fenêtres).
Le protocole X11 étant transparent au réseau, la "mémoire partagée" est étendue aux clients X11 distants.
Essayez firefox -no-remote
Notez que j'ai creusé dans le dôme car cela me dérangeait et vous pouvez aussi ajouter:
MOZ_NO_REMOTE=1
export MOZ_NO_REMOTE
à votre profil.
Vous pouvez essayer ceci lorsque vous vous êtes connecté à la machine (ssh user@Host
; remarque: sans l'option -X), tapez d'abord la commande suivante
export DISPLAY=:0
cela changerait l'affichage par défaut à celui de l'écran du bureau actuel. Et puis tapez juste
firefox
faire apparaître firefox sur la fenêtre du bureau. Assurez-vous que vous êtes connecté au bureau, sans lequel (sans connexions) vous obtiendrez l'erreur suivante;
firefox: cannot connect to X server :0
Cette méthode fonctionnerait également pour les ordinateurs verrouillés. Assurez-vous que vous êtes connecté au bureau et au ssh Shell avec le nom d'utilisateur identique.
Lorsqu'il y a plusieurs sessions de bureau, chaque session est identifiée par un numéro différent: :0
, :1
, :2
, etc.
Aucune des autres solutions ne fonctionnant pour moi, c’est donc après quelques recherches sur d’autres sites.
Vous devez exécuter firefox dans un processus séparé de la même manière que si vous le faisiez tous sur la machine locale. Utilisez le gestionnaire de profil pour créer un nouveau profil comme suit.
export MOZ_NO_REMOTE=1
firefox -ProfileManager
Pour garder les choses cohérentes, j'ai décidé de nommer chaque nouveau profil sur la machine externe de la même manière que le nom d'hôte.
Si vous souhaitez naviguer sur le Web localement comme si vous étiez assis devant une boîte distante:
$ ssh -X [email protected]
puis lancez Firefox dans la session du terminal distant:
$ firefox https://test-ipv6.com/
Notez l'utilisation de l'indicateur -X
dans la commande ssh
. Vous pouvez également effectuer les deux étapes en une seule fois, comme indiqué ci-dessous:
$ ssh -X [email protected] firefox http://test-ipv6.com/
Si vous avez une application s'exécutant à distance qui expose une sorte de front web, vous serez intéressé par l'exposition du port IP: distant comme s'il s'agissait d'un IP local: port. Dans ce cas, l'option -L
définit une correspondance entre localhost:localport
et remotehost:remoteport
, comme indiqué dans la pseudo-commande ci-dessous:
ssh -L localhost:localport:remotehost:remoteport remoteuser@remotehost
Par exemple:
$ ssh -L 127.0.0.1:18080:internal.example.com:8080 [email protected]
puis lancez Firefox localement:
$ firefox http://127.0.0.1:18080
Dans l'exemple ci-dessus, vous vous connectez via SSH à [email protected]
et vous êtes intéressé par une interface Web exposée à internal.example.com:8080
. Cette adresse IP distante: le port sera exposé localement à 127.0.0.1:18080
.
Je vais juste ajouter ce qui a fonctionné pour moi. Utiliser simplement firefox -no-remote
a échoué avec l'erreur habituelle
Error: GDK_BACKEND does not match available displays
Cependant, les éléments suivants ont fonctionné:
ssh -Y user@Host
firefox -no-remote
L'option -Y
active le transfert X11 de confiance. Les redirections X11 de confiance ne sont pas soumises aux contrôles d'extension X11 SECURITY. Vous pouvez envisager d'ajouter l'option -C
à la commande ssh
pour activer également la compression.