每次启动我的机器时,我都需要运行以下命令sudo xhost SI:localuser:root
。所以我想自动执行此过程。我为此使用的是 Ubuntu 12.04 LTS。
我尝试将此命令放在我的文件上/etc/rc.local
,但它不起作用,因为当我运行时xhost
应该出现:
SI:localuser:<myUser>
SI:localuser:root
该文件/etc/rc.local
内容如下:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
xhost SI:localuser:root
exit 0
我是否遗漏了什么?
*PS:正如评论中所建议的**我想做的事情在这个问题中有描述这里。我能用更好的方法做到这一点吗?
答案1
正如@grawity 非常正确指出的那样,这不会起作用。如果你真的想要这样做(这似乎是一个非常糟糕的主意),创建一个~/.xinitrc
包含以下行的文件:
#!/usr/bin/env bash
xhost SI:localuser:root
该xhost
命令不需要运行,root
因为你是 X 会话的所有者。现在,xinitrc
它已经很旧了,我不确定它是否会被现代桌面环境读取。您可以通过调整 GNOME 会话属性来实现相同的目的。
一般来说,启用 X 服务器的 root 访问权限并不是一个好主意。任何时候你需要以 root 身份运行图形程序,您可以禁用访问控制:
xhost +
sudo gedit
xhost -
不过,我非常确定在大多数现代系统上您不需要这样做。您到底想做什么?sudo
无论如何,调用的程序应该可以访问您的 X 服务器。
答案2
它不会起作用,因为:
rc.本地在之前运行X11 服务器已启动。
rc.本地不知道在哪里X11 服务器不知道 $DISPLAY 的正确值。换句话说,它不知道 $DISPLAY 的正确值。
永远记住,可能会有多种的X11 服务器 - Ubuntu 支持“快速用户切换”,因此您可以为自己拥有一个 Xorg 实例,并为登录屏幕拥有第二个实例。
rc.本地无权访问到任何当前正在运行的 X11 服务器。
想想看:如果您需要使用 授予 root 访问权限
xhost
,则意味着 root 尚未拥有访问权限。而 rc.local 正在以 root 身份运行。
以上三点也适用于 cronjobs、udev 规则以及大多数其他事物。