셸에서 실행되는 모든 X11(작업자) 응용 프로그램에는 "지정된 프로토콜 없음"이라는 메시지가 표시됩니다. 이것은 로컬 환경이며 모든 것이 잘 작동하며 SSH X11 전달이 없습니다. OpenSUSE Tumbleweed, lightdm(DM) 및 i3(WM).
$ echo $DISPLAY ; xlsclients
:0
No protocol specified
localhost.localdomain nm-applet
localhost.localdomain polkit-gnome-authentication-agent-1
localhost.localdomain redshift-gtk
localhost.localdomain emacs
localhost.localdomain google-chrome
localhost.localdomain soffice
localhost.localdomain xterm
localhost.localdomain xterm
출력에는 strace xlsclients
다음 블록이 있습니다.
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X0"}, 20) = 0
getpeername(3, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X0"}, [124->20]) = 0
uname({sysname="Linux", nodename="$computer.$domain", ...}) = 0
access("$HOME/.Xauthority", R_OK) = 0
openat(AT_FDCWD, "$HOME/.Xauthority", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0600, st_size=54, ...}) = 0
read(4, "\1\0\0\tlocalhost\0\0010\0\22MIT-MAGIC-COOK"..., 4096) = 54
read(4, "", 4096) = 0
close(4) = 0
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}])
writev(3, [{iov_base="l\0\v\0\0\0\0\0\0\0\0\0", iov_len=12}, {iov_base="", iov_len=0}], 2) = 12
recvfrom(3, 0x555d386945b0, 8, 0, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN|POLLHUP}])
recvfrom(3, "\0\26\v\0\0\0\6\0", 8, 0, NULL, NULL) = 8
recvfrom(3, "No protocol specified\n\0\0", 24, 0, NULL, NULL) = 24
write(2, "No protocol specified\n", 22) = 22
shutdown(3, SHUT_RDWR) = 0
close(3) = 0
보시다시피, 소켓을 열고 /tmp/.X11-unix/X0
읽은 다음 $HOME/.Xauthority
(참고: 모든 경로를 변수로 대체했습니다) 소켓에 12바이트를 씁니다(아마 쿠키에서 얻은 것일 수도 있습니다 .Xauthority
).
X 서버가 "지정된 프로토콜 없음"이라고 응답했습니다.
xauth list
보여주다:
localhost/unix:0 MIT-MAGIC-COOKIE-1 ...string with 32 characters...
이것이 맞는 것 같습니다. X 서버에 어떤 프로토콜이 없습니까?