udev
运行。它一直工作正常。但是,在从Linux 3.8 / Xorg 1.12 / Mint 14(Ubuntu 12.10兼容)升级到Linux 3.11 / Xorg 1.14 / Mint 16(Ubuntu 13.10兼容)后,它不再起作用。脚本仍然运行,但需要显示的所有命令都不起作用。我通过退出
udev
守护程序并手动运行udevd --debug
以获取详细输出(如下所示)来解决了这个问题。这个脚本在Mint 14/12.10中曾经起作用:
export DISPLAY=:0
UUID=$1
DEV=$2
notify-send -t 700 "mounting $DEV ($UUID)"
gnome-terminal -t "Backing up home..." -x rsync long line of data
zenity --warning --text="Done."
但在 Mint 16/13.10 中不再如此。如果你想知道可能的解决方案,我逐渐添加了一些东西,现在它看起来像这样:
export DISPLAY=:0.0
xhost +local:
xhost +si:localuser:root
xhost +
DISPLAY=:0.0
export DISPLAY=:0.0
UUID=$1
DEV=$2
notify-send -t 700 "mounting $DEV ($UUID)"
gnome-terminal -t "Backing up home..." -x rsync long line of data
zenity --warning --text="Done." --display=:0.0
但是它仍然无法正常工作。
udevd --debug
仍然显示如下内容:'(err) 'No protocol specified'
'(err) ''
'(err) '** (gnome-terminal:24171): WARNING **: Could not open X display'
'(err) 'No protocol specified'
'(err) 'Failed to parse arguments: Cannot open display: '
'(err) 'No protocol specified'
'(err) ''
'(err) '** (zenity:24173): WARNING **: Could not open X display'
'(err) 'No protocol specified'
'(err) ''
'(err) '(zenity:24173): Gtk-WARNING **: cannot open display: :0.0'
'(err) 'No protocol specified'
请注意,任何bash逻辑都可以工作。将测试vars回显到
>>/tmp/test.log
可以正常工作。现在只是访问显示器不再起作用了。这让我发疯了。现在实现这个的正确方法是什么?
更新2013-12-20
因此,在以前的Ubuntu中,
X
命令会自动找到当前用户的X
。现在,每次似乎都需要这两件事:
在使用用户的
X
上:
xhost +si:localuser:root
root/udev
端:
- 将使用用户的
~/.Xauthority
文件复制到/root
.Xauthority
文件。旧版Ubuntu使用了什么“技巧”使这个自动完成?
XAUTHORITY
环境变量?如果我没记错,Ubuntu已经更改了.Xauthority
文件的默认路径。 - rodrigo~
中(并且相应地设置了ENV)- 我相信它一直都在~
中。 - Redsandroxhost +
来解决。 - Redsandroxhost +
命令无法生效,因为需要连接到服务器发送 开启对所有人的访问权限 的命令。但是您无法连接到服务器,因为还未被允许。您需要从已登录的会话中执行xhost +
命令。 - rodrigo