python cv2.imshow() 适用于 root,但不适用于 raspberry pi 上的其他用户

python cv2.imshow() is working for root, but not for other users on raspberry pi

在我的 raspberry pi cv2.imshow('text', frame) 上,当 运行 来自 root 时工作正常。但是,当来自另一个用户(myname)的 运行 时,我收到以下错误:

Unable to init server: Could not connect: Connection refused Traceback (most recent call last): File "my_file.py", line 7, in cv.imshow('text', frame) cv.error: OpenCV(4.5.1) /tmp/pip-wheel-qd18ncao/opencv-python/opencv/modules/highgui/src/window_gtk.cpp:624: error: (-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'

我的代码:

import cv2

camera = cv2.VideoCapture(0)
success, frame = camera.read()
if not success:
   stop('camera not connected')
cv2.imshow('text', frame)
cv2.waitKey(1000)

我对用户 (id -a) 的组权限,以防有帮助:

uid=1001(myname) gid=1001(myname) groups=1001(myname),27(sudo),29(audio),44(video)

由于 root (pi) 的一切都按预期工作,我怀疑我没有访问权限或对用户 'myname' 的特定包的正确权限?但是,我不知道如何解决这个问题。

正如我在问题的评论中所说,使用这个命令:

echo $DISPLAY

它为用户打印在环境变量中配置的当前X服务器。如果这个变量对于“pi”和“myname”不同(出于任何原因),那么您应该将“myname”的值更改为等于“pi”的值。如果相同,可以试试这个命令:

xhost +si:localuser:myname 

这将更改用户“myname”的 X 服务器权限。