解决方案
在Wayland中,通常很难以较高的权限(sudo -H,gksu ...)运行GUI应用程序。使用命令行工具执行此类任务是一个好主意。
但是,如果有GUI工具,则有一些变通办法,对您来说效果很好,并且需要提升的权限。(我使用了两个这样的标准工具:Synaptic软件包管理器synaptic
和分区工具Gparted gparted
。我也使用MakeUSB创建USB启动驱动器mkusb
,但是它可以运行需要提升权限的部件而没有图形。)
xhost
和 sudo -H
有一种解决方法,允许除Wayland中已登录用户外的其他用户拥有图形应用程序,
xhost +si:localuser:root
gksu
并且gksudo
未与标准Ubuntu捆绑在一起,因此无法在此处使用,但它们可在Xorg中使用。
相反,您可以使用
sudo -H
最好防止其他用户拥有的图形应用程序,而不是随后登录的用户,
xhost -si:localuser:root
gvfs管理员后端
在Ubuntu 17.10(gvfs> = 1.29.4)中,您可以使用gvfs管理员后端。请注意,您需要完整的路径,
gedit admin:///path/to/file
从理论上讲,无论使用哪种UI ,gvfs admin后端方法(使用polkit)都比(xhost
和xudo -H
)更好,更安全。
您无需以root用户身份运行整个应用程序。特权升级仅在绝对必要时才发生。请参阅以下链接及其链接,
鹦鹉螺管理员
也可以nautilus-admin
用于具有较高权限的文件操作和gedit
具有较高权限的文件。以下AskUbuntu答案对此进行了说明,
通过功能临时访问root到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也可以运行的系统。使用起来可能很方便,但是设置起来比较复杂。请注意,您只能安装其中一种替代产品,因为单行功能会干扰使用该更复杂的系统。
三个档案
shellscript 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
如下所示:
您可以从此链接下载图标文件或包含所有三个文件的压缩包,
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
:
shellscript 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:
gksudo
在Wayland会话中将无法使用,您可以切换到Xorg会话并尝试。