启动时以 root 身份运行的命令不起作用

启动时以 root 身份运行的命令不起作用

每次启动我的机器时,我都需要运行以下命令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

它不会起作用,因为:

  1. rc.本地在之前运行X11 服务器已启动。

  2. rc.本地不知道在哪里X11 服务器不知道 $DISPLAY 的正确值。换句话说,它不知道 $DISPLAY 的正确值。

    永远记住,可能会有多种的X11 服务器 - Ubuntu 支持“快速用户切换”,因此您可以为自己拥有一个 Xorg 实例,并为登录屏幕拥有第二个实例。

  3. rc.本地无权访问到任何当前正在运行的 X11 服务器。

    想想看:如果您需要使用 授予 root 访问权限xhost,则意味着 root 尚未拥有访问权限。而 rc.local 正在以 root 身份运行。

以上三点也适用于 cronjobs、udev 规则以及大多数其他事物。

相关内容