切换回 Xorg

切换回 Xorg

我安装了 Ubuntu 17.10。现在我遇到了以下问题gksu

$ gksu -dg synaptic
No ask_pass set, using default!
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
STARTUP_ID: gksu/synaptic/8760-0-alex-XPS-15-9530_TIME4974977
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: root
cmd[7]: --
cmd[8]: synaptic
buffer: -GNOME_SUDO_PASS-
brute force GNOME_SUDO_PASS ended...
Yeah, we're in...
Unable to init server: Could not connect: Connection refused
(synaptic:8767): Gtk-WARNING **: cannot open display: :1
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
xauth_env: (null)
dir: /tmp/libgksu-HgUjgQ

如果我不使用-g,密码对话框将被禁用。因此,这看起来是为 root 创建 tty 时出现了问题。

有什么建议吗?

答案1

请注意,这个答案特定于使用 Wayland 的 Ubuntu 版本,17.10 是第一个默认使用 Wayland 的版本。

这是一项功能,而不是错误!您无法从终端以 root 身份启动图形应用程序,这是 Wayland 的设计功能。

主要讨论当然是在 Fedora 网站上。请参阅Fedora 错误 #1274451Ask Fedora 上的图形应用程序无法在 wayland 中以 root 身份运行(例如 gedit、beesu、gparted、nautilus)。但 Ubuntu 网站上也有一些讨论(Ubuntu 开发人员不确定在 17.10 中是否默认使用 Wayland - 天哪!Ubuntu)。

Ubuntu 错误报告:无法在 Wayland 会话中启动 pkexec 的应用程序

潜在的解决方法- 如果您使用图形编辑器(如 gedit)编辑系统文件,请使用命令行工具,如nanovimemacsnano通常对新用户来说更容易,vim功能更强大,具有更多功能,请参阅这个 Vim 教程或类似的东西。

无论如何,如果你真的想要或需要以 root 身份运行图形应用程序xhost首先设置强制回退到 Xserver。

要设置权限运行:

xhost si:localuser:root 

完成后,删除权限

xhost -si:localuser:root 

您可以添加图形/桌面选项来执行此操作此突触错误报告

pkexec 的应用程序可以通过放置在 XDG 自动启动中来修复,xhost +si:localuser:root如下所示(N0rbert 的想法):

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

你可以将这个 xhost 命令添加到 .bashrc 中,但我建议使用一对别名

alias gsuon='xhost si:localuser:root'

alias gsuoff='xhost -si:localuser:root'

您可以随意命名别名。

有关详细信息,请参阅:


切换回 Xorg

如果你出于某种原因更喜欢 Xorg,你可以选择在登录时在 Xorg 上运行

如何在 Ubuntu 17.10 中从 Wayland 切换回 Xorg?

答案2

在此处输入图片描述解决方案

在 Wayland 中,通常很难以提升的权限(sudo -H、gksu ...)运行 GUI 应用程序。使用命令行工具执行此类任务是个好主意。

但是,如果你有一个 GUI 工具,那么它对你来说很有效,并且需要提升权限,那么就有一些变通方法。(我使用两个这样的标准工具:Synaptic 包管理器,synaptic以及分区工具 Gparted,gparted。我使用 MakeUSB 创建 USB 启动驱动器,mkusb,但它可以在没有图形的情况下运行需要提升权限的部分。)

gvfs 管理后端

gvfs 管理后端是一个使用 GUI 工具提升权限的良好工具。在 Ubuntu 17.10(gvfs >= 1.29.4)及更新版本中,您可以使用 gvfs 管理后端。请注意,您需要完整路径,例如

thunar admin:///path/to/directory
gedit admin:///path/to/file

理论上,无论您使用什么 UI, gvfs 管理后端方法(使用 polkit)都比xhost和更好、更安全。sudo -H

您无需以 root 身份运行整个应用程序。只有在绝对必要时才会提升权限。请参阅以下链接及其中的链接,

xhostsudo -H

  1. 有一种解决方法是允许 Wayland 中登录用户以外的其他用户拥有图形应用程序,

     xhost +si:localuser:root
    
  2. gksu并且gksudo没有与标准 Ubuntu 捆绑在一起,因此在这里无法使用,但它们可以在 Xorg 中使用。

    相反,你可以使用

     sudo -H
    

    编辑:

    -H不再需要(在 20.04 LTS 及更新版本中)

    在 20.04(或者可能是 19.10,我不记得是什么时候)之前,使用 sudo 来操作 GUI 应用程序(尤其是文件管理器)可能会将您主目录中文件和文件夹的所有权更改为 root,从而完全剥夺您以用户身份登录系统的能力。系统使用 sudo 的方式发生变化意味着发生这种情况的危险现在已经消失,因此就该问题而言应该是安全的。

    編輯結束

  3. 最好以后阻止其他用户拥有的图形应用程序,而不是登录用户,

     xhost -si:localuser:root
    

nautilus 管理员

也可以使用nautilus-admin提升权限的文件操作,并使用gedit提升权限。以下 AskUbuntu 回答对此进行了描述,

通过函数临时访问 Wayland 桌面gks

请避免使用sudo GUI-program。它可能会导致系统用 的配置覆盖您的常规用户 ID 的配置文件root,并设置所有权和权限以适应root并锁定您的常规用户 ID。您应该使用 运行 GUI 应用程序,它会将配置文件写入的主目录sudo -H中。示例:root/root

sudo -H gedit myfile.txt

但你可能会忘记-H。相反,你可以创建一个函数,例如gks

gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }

并将其存储在~/.bashrc别名附近。然后你可以运行

gks gedit myfile.txt

方式与您gksudo以前使用的方式类似。

测试

您可以检查如何sudo使用sudo -H以下gks命令

sudodus@xenial32 ~ $ sudo bash -c "echo ~"
/home/sudodus
sudodus@xenial32 ~ $ sudo -H bash -c "echo ~"
/root
sudodus@xenial32 ~ $ gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
sudodus@xenial32 ~ $ gks bash -c "echo ~"
localuser:root being added to access control list
/root
localuser:root being removed from access control list
sudodus@xenial32 ~ $ 

而且当然

gks gedit myfile.txt

根据上一节的例子。

通过 Alt-F2 和 Gnome Shell 菜单实现的方法

除了向 中添加简单的单行函数外~/.bashrc,您还可以创建一个无需 bash 也能运行的系统。它可能使用起来很方便,但设置起来更复杂。请注意,您应该只安装其中一个替代方案,因为单行函数会干扰使用这个更复杂的系统。

三个文件

shell脚本gks

#!/bin/bash

xhost +si:localuser:root

if [ $# -eq 0 ]
then
  xterm -T "gks console - enter command and password" \
  -fa default -fs 14 -geometry 60x4 \
  -e bash -c 'echo "gks lets you run command lines with GUI programs
with temporary elevated permissions in Wayland."; \
read -p "Enter command: " cmd; \
cmdfile=$(mktemp); echo "$cmd" > "$cmdfile"; \
sudo -H bash "$cmdfile"; rm "$cmdfile"'
else
 xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H "$@"
fi 

xhost -si:localuser:root;

桌面文件gks.desktop

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gks
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gks %f
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

图标文件gks.svg看起来像这样:

在此处输入图片描述

您可以从此链接下载图标文件或包含所有三个文件的 tarball,

wiki.ubuntu.com/Wayland/gks

将[提取或复制并粘贴的]文件复制到以下位置,

sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons

注销/登录或重新启动,桌面上应该会出现一个可用的图标。它将像使用带有该功能的简单解决方案一样从终端窗口运行。

Alt F2盒子:

在此处输入图片描述

Gnome Shell 菜单:

在此处输入图片描述

gks 控制台和 gparted:

在此处输入图片描述

自定义脚本和桌面文件

如果您只有少数 GUI 应用程序需要提升权限,您可以为它们创建自定义脚本和桌面文件,避免输入命令(应用程序名称)。您只需输入密码,与以前的 Ubuntu 版本相比,这并不难(无论如何您都应该输入密码)。

xlogo程序包中附带的简单 GUI 程序示例x11-apps

shell脚本gkslogo(与 相比有所简化gks),

#!/bin/bash

xhost +si:localuser:root

xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H xlogo

xhost -si:localuser:root;

桌面文件gkslogo.desktop

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gkslogo
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gkslogo
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

我很懒,使用了相同的图标文件gks.svg

将[复制并粘贴]文件复制到以下位置,

sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/

gks[logo] 控制台和 xlogo:

在此处输入图片描述

答案3

在授予 root 权限之前,最好先检查 Wayland 是否正在运行

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi

答案4

对于使用 su-to-root 和 pkexec 的应用程序,您可能需要将此代码添加到/etc/xdg/autostart(请参阅我在 launchpad 上的评论)风险自负:

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

其他 root 应用程序在 Wayland 上也出现问题(参见错误 1713313错误 1713311)。


如果您不想要永久的解决方案,您可以使用@ravery 的方法:

xhost +si:localuser:root只需在启动特权应用程序之前在终端中输入

相关内容