曾几何时,
DISPLAY=:0.0 totem /path/to/movie.avi
从笔记本电脑ssh进入我的桌面后,图腾会movie.avi
在我的桌面上播放。
现在,它给出了错误:
No protocol specified Cannot open display:
当两台计算机都稳定下来时,我重新安装了Debian squeeze,我想我打破了配置。
我已经用谷歌搜索了,无法终生弄清楚我应该做的事情。
(VLC有一个可以使用的HTTP接口,但它不如ssh方便。)
当我尝试从cron作业运行此问题时,也会出现相同的问题。
(适应于Linux:通过ssh + screen启动会话时,wmctrl无法打开显示)
X程序需要两条信息才能连接到X显示器。
它需要的显示,这是典型的地址:0
,当你在本地已经登录或:10
,:11
等等。当你在远程登录(但数量会随着许多X连接是如何积极改变)。显示器的地址通常在DISPLAY
环境变量中指示。
它需要显示密码。X显示密码称为魔术cookie。不可直接指定魔术Cookie:魔术Cookie始终存储在X授权文件中,该文件是“显示:42
具有cookie 123456
”形式的记录的集合。X授权文件通常在XAUTHORITY
环境变量中指示。如果$XAUTHORITY
未设置,则程序使用~/.Xauthority
。
您正在尝试对桌面上显示的窗口执行操作。如果您是唯一使用台式机的人,则显示名称很可能是:0
。查找X授权文件的位置更加困难,因为在Debian squeeze或Ubuntu 10.04下设置的gdm,它位于具有随机生成名称的文件中。(您之前没有问题,因为早期版本的gdm使用了默认设置,即存储在中的cookie ~/.Xauthority
。)
以下是获取DISPLAY
and值的几种方法XAUTHORITY
:
您可以从桌面系统地启动屏幕会话,也许可以在登录脚本中自动启动(从~/.profile
;但仅在以X:登录时测试:如果ifDISPLAY
设置为开头的值:
(应该涵盖所有可能的情况)遇到))。在~/.profile
:
case $DISPLAY in
:*) screen -S local -d -m;;
esac
然后,在ssh会话中:
screen -d -r local
你也可以保存的值DISPLAY
,并XAUTHORITY
在文件中调出值。在~/.profile
:
case $DISPLAY in
:*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
esac
在ssh会话中:
. ~/.local-display-setup.sh
screen
您可以检测正在运行的进程的值,DISPLAY
也可以XAUTHORITY
从正在运行的进程中检测值。这很难自动化。您必须找出与要处理的显示器相连的进程的PID,然后从/proc/$pid/environ
(eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
¹)获取环境变量。
另一种方法(遵循Arrowmaster的建议)是不尝试$XAUTHORITY
在ssh会话中获取的值,而是使X会话将其cookie复制到中~/.Xauthority
。由于每次登录时都会生成Cookie,因此,如果将过时的值保留在中,这不是问题~/.Xauthority
。
如果可以通过NFS或其他允许远程管理员查看其内容的网络文件系统访问主目录,则可能存在安全问题。他们仍然需要以某种方式连接到您的计算机,除非您启用了X TCP连接(默认情况下,Debian将其关闭)。因此,对于大多数人来说,这要么不适用(无NFS),要么不成问题(无X TCP连接)。
要在登录桌面X会话时复制cookie,请在~/.xprofile
或~/.profile
(或登录时读取的其他脚本)中添加以下行:
case $DISPLAY:$XAUTHORITY in
:*:?*)
# DISPLAY is set and points to a local display, and XAUTHORITY is
# set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac
¹原则上,它缺少正确的引号,但在此特定情况下$DISPLAY
,$XAUTHORITY
将不包含任何shell元字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句