不需要物理显示器的情况下通过VNC使用tkinter

3
我的设置是:
  • 树莓派,运行最新的Raspbian(完全更新),自编译Python 3.3.3
  • Mac运行Mavericks(10.9)
我通过AFP、SSH和VNC连接到我的RPi,可以运行所有命令行脚本,并且可以打开任何已安装的GUI应用程序。但是当我想运行基于tkinter的GUI应用程序以控制连接到GPIO的某些硬件时,出现以下错误消息:

enter image description here

Client is not authorized to connect to ServerTraceback (most recent call last):
    ...
_tkinter.TclError: couldn't connect to display ":1"

我的猜测是,这与RPi没有物理显示器有关,尽管我不知道如何解决这种情况。

提前感谢!


我没有做过这个,但是 Linux 中的窗口管理器是客户端-服务器模式。Linux 有一个名为 DISPLAY 的变量(echo $ DISPLAY),它告诉服务器应将窗口/图形发送到何处 - 客户端在哪里。在带有监视器的计算机中,DISPLAY 是 :0.0,但它也可以是 :IP_address.display_number - furas
@furas 好的,那么你有什么建议?(echo $DISPLAY 显示为 :1) - Peter Varo
2个回答

6
我在RaspberryPi Stack Exchange网站上问了这个问题@hildred给出了一个很好的解决方案:

etc/sudoers*中写入以下几行:

Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults    env_keep += "DISPLAY"
Defaults    env_keep += "XAUTHORITY"

并添加这几行到~/.bashrc文件中:

if [ -z "$XAUTHORITY" ]; then
    if [ -e $HOME/.Xauthority ]; then
        export XAUTHORITY=$HOME/.Xauthority;
    fi;
fi

在Raspbian上,例如/etc/sudoers.d/README


1

树莓派论坛上的一个人通过tkinter解决了类似的问题:

一个简单的解决方法是给root适当的授权来使用X11连接。同样,在LXTerminal窗口中执行以下操作:

pi@raspberrypi ~ $ sudo xauth add `xauth list`

2
这种做法在多用户计算机上有些过度,而且有点危险。只需要允许sudo导出XAUTHORITY会更清洁。 - hildred
我点赞这个答案,因为我认为这个解决方案可能有效,尽管我更喜欢@hildred的解决方案。 - Peter Varo
@PeterVaro,它一直运行得很好,直到/root/.Xauthority变得如此庞大,以至于您开始遇到延迟,因此其中一个聪明的人决定将其删除。 - hildred

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接