Je sais qu'après avoir appelé (start-server)
dans une session Emacs existante, je peux alors utiliser emacsclient -c
(sur le même ordinateur) pour créer de nouvelles trames qui se connectent à ce serveur, de sorte que chaque nouvelle trame créée par emacsclient
a accès au même ensemble d'états partagés (par exemple, les tampons).
La plupart de la documentation que j'ai trouvée se concentre sur le cas d'utilisation "donnez-moi un accès rapide à mon Emacs local", et il y a donc deux choses sur lesquelles je n'ai pas encore vu de détails :
-
Can
emacsclient -c
accéder aux serveurs Emacs démarrés par autre ou est-il câblé pour ne détecter que les sessions lancées par mon propre utilisateur ? -
Le serveur Emacs supporte-t-il (directement ou indirectement) les connexions à distance ? En d'autres termes, existe-t-il un moyen de configurer Emacs (en utilisant éventuellement SSH) qui permette d'appeler le serveur Emacs à distance ?
emacsclient -c
sur à distance pour avoir accès au local l'état de mon serveur Emacs ?
(Au cas où vous ne l'auriez pas déjà deviné, ce que j'aimerais faire en définitive, c'est combiner les deux techniques ci-dessus pour fournir un support rudimentaire d'édition collaborative).
Il s'agit d'un problème du monde réel, alors voici ce avec quoi je travaille :
- La fonctionnalité nécessaire devrait être déjà intégrée dans Emacs (23.3.1, 64 bits). Je peux m'étirer vers des extensions d'Emacs à partir des dépôts standards d'Ubuntu, mais je préfère ne pas le faire. (Ce qui, je crois, exclut Rudel triste.)
- Pas de nouveaux utilisateurs ou d'usurpation d'identité. Les solutions doivent fonctionner avec l'ensemble des comptes d'utilisateurs existants, et les utilisateurs ne doivent pas se faire passer pour d'autres utilisateurs (par exemple, par le biais de
su
oussh
).
Si cela fait une différence, les machines se trouvent sur un réseau local privé, des clients et des serveurs OpenSSH sont installés (et fonctionnent), et tous les utilisateurs peuvent se connecter à (leur propre compte sur) toutes les machines, mais elles n'ont pas de système de fichiers partagé.
Alors, quelqu'un sait-il si le serveur Emacs peut
- accorder l'accès à d'autres utilisateurs, ou
- fournir un accès à distance ?
EDIT
Comme commenté dans la réponse de rwb, il est clair que le nouveau Windows est ouvert localement en exécutant emacsclient -c
sont en fait créés par le à distance Processus du serveur Emacs. C'est-à-dire, emacsclient
ne fait que déclencher le comportement approprié dans le serveur. Cela pose quelques problèmes avec les paramètres d'affichage incorrects, puisque le serveur n'a normalement pas accès au bureau local (voir ci-dessous). Cependant, je peux maintenant me connecter à une session Emacs distante si j'utilise la séquence de commandes suivante :
Dans un terminal, où 1.22.333.44
est l'adresse IP de remotehost
:
ssh -t -X remotehost \
"emacs -nw --eval
'(progn (setq server-host \"1.22.333.44\" server-use-tcp t) (server-start))'"
Puis dans un autre (sur la même machine) :
scp remotehost:.emacs.d/server/server /tmp/server-file
DISPLAY=localhost:10 emacsclient -c -f /tmp/server-file
Le site emacsclient
fait en sorte que le serveur Emacs distant (dont il trouve les détails dans le fichier /tmp/server-file
) pour ouvrir une fenêtre graphique Emacs (sur l'écran local) qui partage l'état avec la session Emacs sur l'hôte distant.
Puisque le serveur Emacs distant a été lancé via ssh -X
SSH lui permet d'accéder à mon écran local via une "fausse" adresse. :10
affichage. Le site DISPLAY=:10
qui lui est transmis (via emacsclient
) provoque ainsi l'ouverture d'une fenêtre sur mon bureau local.
Bien que l'approche ci-dessus permette de cocher la case "Exécuter le serveur Emacs sur une machine distante, s'y connecter en utilisant la fonction emacsclient
localement", c'est très limité. En fait, ce n'est pas très différent de faire tourner le serveur et les clients en local comme un seul utilisateur : la seule différence est que le serveur est maintenant distant et a donc accès à des ressources système différentes.
Malheureusement, le lancement via ssh -X
est le seul moyen que j'ai trouvé pour ouvrir une fenêtre sur le serveur X d'une autre machine :
-
Spécifier une base
DISPLAY=remote:0
n'aboutit à rien (puisque les serveurs X d'Ubuntu sont démarrés avec la commande-nolisten tcp
option). -
Se connecter via SSH puis utiliser
DISPLAY=:0
échoue également, mais cette fois-ci uniquement en raison de l'absence d'informations d'authentification appropriées. (Je pense que c'est le cas, de toute façon : le message d'erreur dit de manière cryptéeNo protocol specified
/Can't open display
.)
Je pense que trouver un moyen de contourner le deuxième problème me rapprocherait probablement beaucoup d'une solution.
Après avoir lu les messages à http://comments.gmane.org/gmane.emacs.devel/103350 (à partir du message '25 Oct 14:50', à peu près à la moitié) Je commence à me demander si ce n'est pas l'une des rares choses qu'Emacs ne peut pas faire (c'est-à-dire qu'il est impossible ;-) ).
Cependant, si quelqu'un a un moyen de fournir un accès aux écrans X distants sans l'erreur de permissions ci-dessus, je suis toujours ouvert à la persuasion.....