Qu'est-ce que `/ tmp / .X11-unix /`?

31

J'ai posé la même question à Google et je n'ai pas aimé les résultats que j'ai obtenus.

Qu'est-ce que c'est /tmp/.X11-unix/?

ThorSummoner
la source
2
Wow, j'allais vous demander ce que vous n'aimiez pas chez eux ... mais ce sont des résultats assez terribles.
derobert
Exécutez-vous Xvnc?
toxefa
2
@ py4on Je ne pense pas, je le demande en raison de mon intérêt pour l'exécution d'applications graphiques à l'intérieur d'un conteneur docker, auquel cela mentionne de faire passer cette socket x11 au conteneur. stackoverflow.com/a/25334301/1695680
ThorSummoner
Terrible? Vraiment? Dans ma partie du monde, le deuxième résultat de recherche est unix.stackexchange.com/questions/57138 sur ce site très WWW.
JdeBP
3
@JdeBP en effet, mais le titre d'un extrait ne vous donne aucune raison de cliquer dessus - ressemble à la résolution d'un problème aléatoire. Bien sûr, maintenant cette question apparaît, donc Google est corrigé.
derobert

Réponses:

21

Sur mon ordinateur portable Arch, assez à jour, se /tmp/.X11-unix/trouve un répertoire avec une entrée:X0 :, une socket de domaine Unix .

Le serveur X11 (généralement Xorg nos jours) communique avec des clients comme xtermFirefox, etc. via une sorte de flux d'octets fiable. Un socket de domaine Unix est probablement un peu plus sécurisé qu'un socket TCP ouvert au monde, et probablement un peu plus rapide, car le noyau fait tout, et n'a pas besoin de s'appuyer sur une carte Ethernet ou sans fil.

Mon serveur X11 apparaît comme:

bediger    294   293  0 Apr09 tty1     01:23:26 /usr/lib/xorg-server/Xorg -nolisten tcp :0 vt1 -auth /tmp/serverauth.aK3Lrv5hMV

Le "-nolisten tcp" l'empêche d'ouvrir le port TCP 6000 pour les communications.

La commande lsof -Upeut vous dire quels processus utilisent quels sockets de domaine Unix. Je vois Xorgcomme connecté à /tmp/.X11-unix/X0.

Bruce Ediger
la source
1
Était sur le point de créer un lien vers une autre de vos réponses! unix.stackexchange.com/a/20380/109083
toxefa
2
Pas pour tergiverser, mais je doute qu'un socket local unix présente des avantages en termes de performances par rapport à un socket TCP local (qui n'utilise pas d'interface matérielle et est également 100% noyau).
goldilocks
@goldilocks - une affirmation intéressante.
Bruce Ediger
1
@Max je me corrige! Bien que ce ne soit pas pour les raisons citées par Bruce, mais à cause de la surcharge de la pile TCP du noyau.
goldilocks
11

Le serveur X a plusieurs façons de communiquer avec les clients X (applications). Le plus courant à utiliser, au moins sur la même machine, est un socket de domaine Unix.

Un socket de domaine Unix est comme les TCP plus familiers, sauf qu'au lieu de se connecter à une adresse et un port, vous vous connectez à un chemin . Vous utilisez un fichier réel (un fichier socket) pour vous connecter.

Le serveur X place son socket dans /tmp/.X11-unix:

$ ls -l /tmp/.X11-unix/X0 
srwxrwxrwx 1 root root 0 Dec 18 18:03 /tmp/.X11-unix/X0

Notez le sdevant des autorisations, ce qui signifie que c'est un socket. Si vous avez plusieurs serveurs X en cours d'exécution, vous y trouverez plusieurs fichiers.

Au moins avec les pages de manuel Linux, plus de détails sur les sockets (en général) peuvent être trouvés dans man 7 socket. Les détails sur les sockets de domaine Unix sont disponibles man 7 unix. Notez que ces pages sont destinées aux programmeurs.

derobert
la source
1

/tmp/.X11-unix/X{n} est l'endroit où le serveur X place les sockets AF_DOMAIN à l'écoute. Près du même endroit sont /tmp/.X{n}-lock étant des verrous. Comme indiqué dans https://bugzilla.redhat.com/show_bug.cgi?id=503181, ce schéma n'est pas bon pour le FHS.

把 友情 留 在 无 盐
la source