J C*_*ins 27 ubuntu gui not-root-user
我正在尝试使用备用用户(非管理员)在我的系统上执行图形软件。此备用用户已被命名并赋予 UID 和 GID 以匹配同名的远程系统用户。UID 是 500,所以我相信这会使用户成为“非登录”用户。
从登录到我的主帐户的 Ubuntu 开始,我打开一个终端并su转到备用用户。然后我尝试执行命令以启动应用程序并收到“未指定协议”。
这是因为 UID <1000,su还是因为用户的非管理员?如何让该用户使用 GUI 执行应用程序?
Cel*_*ada 23
由于用户的 UID,问题不会发生。500 作为 UID 就好了,除了在一些显示管理器的默认设置中,该 UID 并没有使它成为“非登录”用户。
错误消息No protocol specified听起来像是特定于应用程序的错误消息,而且没有帮助,但我猜测该错误是该应用程序无法联系您的 X11 显示器,因为它没有权限这样做所以因为它以不同的用户身份运行。应用程序需要一个“魔法 cookie”(秘密令牌)才能与 X11 服务器通信,这样系统上在其他用户下运行的其他进程就无法侵入您的显示器、创建窗口和窥探您的击键。其他系统用户无权访问此魔法 cookie,因为权限设置为只有启动桌面环境的用户才能访问(这是应该的)。
试试这个,以您的原始用户身份运行,将 X11 cookie 复制到另一个帐户:
su - <otheruser> -c "unset XAUTHORITY; xauth add $(xauth list)"
Run Code Online (Sandbox Code Playgroud)
然后运行您的应用程序。您可能还需要XAUTHORITY在该 shell 中取消设置。该命令xauth list从您的主用户处提取魔法 cookie ( ) 并将其添加 ( xauth add) 到其他用户可以获取的位置。
MAD*_*ppy 18
就我而言,新的显示服务器协议wayland是问题所在,
只要这样做,xhost + local:其他用户(例如root)就可以在您的会话中运行程序,但是不允许网络连接。
如果您想允许来自任何主机的客户端,则可以使用xhost +而无需指定任何主机。然而,这是不安全的,最好只指定要授予其会话访问权限的主机。
假设你想用蛮力让自己与 X 建立联系......
让我们假设您已经在服务器上运行您的命令(X 运行的地方),否则首先让它工作,然后从客户端使用 'ssh -X user@server' ;)。
可能有多种方法可以运行 xauth 命令,例如,您可能正在使用“sudo”,但这可能会丢失或更改环境变量。需要保留以下环境变量:DISPLAY 和 XAUTHORITY。要测试是否是这种情况,您可以以与运行命令相同的方式运行 'echo $XAUTHORITY',但请确保在运行这些命令之前没有扩展环境变量。例如,尝试: sudo bash -c 'echo "$XAUTHORITY"' 以查看运行 sudo 后 XAUTHORITY 的真正含义(如果它消失了,您可能需要在 sudoers 文件中添加一些内容,请参阅其他地方)。
最后,以您想要访问的用户身份在服务器上运行以下命令:
xauth info
这将显示将使用的“权威文件”(默认情况下为 /root/.Xauthority,对于 root,或类似 /home/theuser/.Xauthority)。如果它显示正确的 .Xauthority 文件,那么您实际上不必担心 XAUTHORITY 环境变量(实际上,我不知道它何时不会,除非您想操作该文件的非标准位置)。
删除该文件(如果它甚至存在):
rm /root/.Xauthority
替换/root/.Xauthority为适合您案例的正确 XAUTHORITY 文件。
重新创建它,但为空(很多命令都需要这样做):
touch /root/.Xauthority
此时,即使您之前收到无效的 MIT-MAGIC-COOKIE-1,您也会收到No protocol specified错误。找到目前X服务器使用的权限文件:
ps aux | grep Xorg
这应该显示如下:
root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7
后面的文件名-auth是您在下一个命令中需要的。以 root 身份运行:
sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list
这列出了一个 32 位的十六进制密钥。例如,输出可能是:
hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
使用它来生成您的 .Xauthority 文件(作为需要再次登录的用户):
xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
用 list 命令为您返回的内容替换“c0eaf749aa252101a0f57d5087089db7”。现在你的 .Xauthority 应该是 51 字节,你可以连接到 X 服务器(再次)。