如何修复错误 Xlib.error.DisplayConnectionError: 无法连接到显示“:0”: b'未指定协议 '

问题描述 投票:0回答:6

我正在使用 python3 和 XLib 制作一些程序。

在我的 Ubuntu 14.04 电脑上,一切正常,但是当我尝试在笔记本中手动安装 Xorg 运行我的应用程序时,出现异常:

Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'No protocol specified\n'

上线:

self.__display = Xlib.display.Display()

这是怎么回事?如何解决这个问题,使其可以在每个 Linux 上运行?

编辑:

这看起来不像X11:以另一个用户身份运行 gnome 应用程序的重复。在我的两台计算机上,我有相同的用户和组,所以这个问题可能与缺乏运行我的程序的权限无关。

一定是 X 配置不好的其他原因。

python xlib
6个回答
21
投票

临时解决方法是

$ xhost +

http://ubuntuforums.org/showthread.php?t=2290602


1
投票

好吧,这是 python3-xlib 中的错误。详情请参阅https://github.com/LiuLang/python3-xlib/issues/6


1
投票

这个问题与 x 显示服务器连接策略有关,默认情况下确实有限制

您可以通过允许访问将执行该代码的用户来解决此问题

如果您是要执行 plover 的用户,那么要粘贴到 shell 中的代码是

xhost +local:$USER

否则您可以使用将要运行代码的用户的用户名来切换

$USER

使此更改永久化的一种方法是将该行代码添加到您的登录脚本中,id est

~/.profile
为您的用户或文件中的任何用户
/etc/profile/
如果您想抑制命令输出文本,您可以将输出重定向到
/dev/null
,从而使整个命令:

xhost +local:$USER > /dev/null

在尝试运行 plover 时也遇到过同样的问题。


0
投票

永久正确的解决方案是将允许的主机和用户添加到

/etc/Xn.hosts
,其中 n 代表显示编号(例如
/etc/X0.hosts
)。 以下内容将允许所有用户使用 localhost(不带尾随空格):

local:

0
投票

FileNotFoundError Traceback(最近一次调用最后一次) /usr/local/lib/python3.10/dist-packages/Xlib/support/unix_connect.py in get_socket(dname, host, dno) 75 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) ---> 76 s.connect('/tmp/.X11-unix/X%d' % dno) 77 除了 OSError 为 val:

FileNotFoundError:[Errno 2]没有这样的文件或目录

在处理上述异常的过程中,又发生了一个异常:

DisplayConnectionError Traceback(最近一次调用最后一次) 7帧 /usr/local/lib/python3.10/dist-packages/Xlib/support/unix_connect.py in get_socket(dname, host, dno) 76 s.connect('/tmp/.X11-unix/X%d' % dno) 77 除了 OSError 作为 val: ---> 78 引发错误。DisplayConnectionError(dname, str(val)) 79 80 # 确保连接不会在子进程中继承

DisplayConnectionError:无法连接到显示器“:0”:[Errno 2]没有这样的文件或目录

如何解决这个问题?


-2
投票

肯定和权限有关系。 要获得超级用户权限,在 Linux 上您只需输入:

$ sudo su
<input your root password>

现在再次运行 python 文件

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.