[ 已解决 ] 关于普通用户和 root 用户的命令不相同的问题

我发现好多在普通用户下可以用的命令,如果在普通用户的终端下,用 sudo 后面跟命令的话,会出现 konqueror: cannot connect to X server,或者是找不到这个命令,怎么解决这个问题

图形界面应用程序都用 Xorg,笨办法理解(可能不对):一仆不能侍二主。Xorg 没法把当前亮着的屏幕在已经给了你普通用户使用的时候再给 root 用户使用。这应该是大部分你所谓的 warning 的来源。sudo 基本只能执行 命令行 程序,图形界面程序请使用

来执行。

1赞

可是我运行 shutdown -h now 都不行,提示找不到命令,肿么办

Sent from my Galaxy Nexus using Tapatalk 2

/sbin/shutdown -h +3
试试

亲!那是关机命令啊,只有 root 能直接运行这个命令哒!

su
shutdown -hP now

这才是正确的。 :joy:

sudo shutdown …
也应该是可以的

我试过是不行的,好些命令都不行,但是我用 su - 命令切换到 root 就可以运行

Sent from my Galaxy Nexus using Tapatalk 2

亲!那是关机命令啊,只有 root 能直接运行这个命令哒!

su
shutdown -hP now

这才是正确的。
他的意思应该是说
sudo shutdown [option]
怎么不行,但是
sudo /sbin/shutdown [option]
就可以啦。很多命令都是这样的。我一般都要输完命令按一下 TAB 的。 :joy:

如果用 root 登陆一次桌面会不会解决这个问题?

不要用 root 登录桌面,我不清楚 openSUSE 是否允许使用 root 登陆图形界面。如果可以,你这样做的话一不小心操作失误就不可挽回的。

失误是指?如果一登陆就退出的话

root 登录,要是你对自己的操作有把握绝对可以这么搞的。很久以前折腾 Debian 时就改了 gdm 的配置来允许 root 登录。openSUSE 摸索中……

亲!那是关机命令啊,只有 root 能直接运行这个命令哒!

su
shutdown -hP now

这才是正确的。
他的意思应该是说
sudo shutdown [option]
怎么不行,但是
sudo /sbin/shutdown [option]
就可以啦。很多命令都是这样的。我一般都要输完命令按一下 TAB 的。 :joy:
亲,一点没错。我也是按 tab 来补全,自动补上 /sbin/shutdown 之类的
Sent from my Galaxy Nexus using Tapatalk 2

好像 ubuntu 普通用户可以 sudo shutdown -h now。。。

------ 从我使用 Tapatalk 的海尔全自动洗衣机发出。

是的,所以我有点不解为什么 suse 不可以,难道是 path 的问题?

Sent from my Galaxy Nexus using Tapatalk 2

不安全吧。那个命令是在 /sbin/shutdown 可不是 /usr/sbin 或 /usr/bin。

根据 LSB 标准的定义,/sbin 就是普通用户即使 sudo 也访问不到的地方哎。

不然你多个用户登录的服务器,其中一个用户手贱给你关机了怎么办那。

另外 Ubuntu 用的是渣 upstart (红帽开发者说的),而 openSUSE 用的是 systemd。两者后端都不同哦。

这样啊,明白了,多谢解惑

Sent from my Galaxy Nexus using Tapatalk 2

能 sudo 的话不是就能 su 么?

这个问题还是用 kdesu 吧,sudo 不能运行 root 的命令还有可能是 /sbin 不在 PATH 里,echo $PATH 看一下,没有的话加上就好了

大家说了这么多,还是没有说到点子上呀。
首先 sudo 和 su 之后 能找到什么命令不是一码事。
sudo能找到什么命令(这里不谈能执行什么命令),取决于sudo之后的PATH路径是多少,而这是由 sudoers 中的 env_reset, env_keep, secure_path, env_check, env_delete 共同作用的。
简单来说,sudo之后,PATH会被重置。该PATH既不是你当前普通用户的PATH,也不是su之后的PATH。比如我机器PATH被重置为:

/usr/bin:/bin:/usr/sbin:/sbin

这是由于DISPLAY变量没有被保留的原因。你可以修改sudoers文件(执行sudo visudo来修改),在 Defaults env_keep=“×××” 这一行下面添加这么一行:

Defaults env_keep+="DISPLAY"

以你执行sudo shutdown 找不到命令为例,请执行下述命令并告诉我结果,注意,每条命令的输出都要告诉我

which shutdown
echo 'echo $PATH' | sudo sh
sudo sudo -V                 #这条命令不能执行的话,那请先su然后sudo -V
1赞