Ale*_*iro 47 root wayland gksu
我安装了 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
Run Code Online (Sandbox Code Playgroud)
如果我不使用-g
,密码对话框将被禁用。所以看起来像为 root 创建 tty 的问题。
有什么建议吗?
Pan*_*her 59
这是一个功能而不是一个错误!无法从终端以 root 身份启动图形应用程序是 Wayland 的一个设计特性。
主要讨论当然是在 Fedora 站点上进行的。请参阅Fedora 错误 #1274451和图形应用程序不能在 Wayland(例如 gedit、beesu、gparted、nautilus)中以 root 身份运行在 Ask Fedora 上。但是在 Ubuntu 站点上也有一些讨论(Ubuntu Devs Uncertain about Using Wayland by Default in 17.10 - OMG!Ubuntu)。
Ubuntu 错误报告:无法在 Wayland 会话上启动 pkexec 的应用程序
可能的变通方法- 如果您使用图形编辑器(例如 gedit)编辑系统文件,请使用命令行工具,例如nano
orvim
或emacs
。nano
对于新用户来说通常更容易,vim
功能更强大并且具有更多功能,请参阅此 Vim 教程或类似内容。
无论如何,如果您真的想要或需要以root身份运行图形应用程序,请xhost
首先设置强制回退到 Xserver。
设置权限运行:
xhost si:localuser:root
Run Code Online (Sandbox Code Playgroud)
完成后,删除权限
xhost -si:localuser:root
Run Code Online (Sandbox Code Playgroud)
您可以根据此突触错误报告添加图形/桌面选项来执行此操作
pkexec 的应用程序可以通过
xhost +si:localuser:root
放置在 XDG 自动启动中来修复,如下所示(N0rbert 的想法):Run Code Online (Sandbox Code Playgroud)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'
Run Code Online (Sandbox Code Playgroud)
您可以随意命名别名。
详情请见:
如果您出于任何原因更喜欢 Xorg,您可以选择在登录时在 Xorg 上运行
请参阅如何在 Ubuntu 17.10 中从 Wayland 切换回 Xorg?
sud*_*dus 21
在 Wayland 中,通常很难以提升的(sudo -H、gksu ...)权限运行 GUI 应用程序。使用命令行工具执行此类任务是个好主意。
但是有一些变通方法,如果您有一个 GUI 工具,它很适合您并且需要提升权限。(我使用两个这样的标准工具:Synaptic Package Managersynaptic
和分区工具 Gparted gparted
。我也使用 MakeUSB 来创建 USB 引导驱动器mkusb
,但它可以运行需要提升权限的部分,而无需图形。)
xhost
和 sudo -H
有一种解决方法可以允许其他用户拥有的图形应用程序而不是 Wayland 中的登录用户,
xhost +si:localuser:root
Run Code Online (Sandbox Code Playgroud)
gksu
并且gksudo
不与标准 Ubuntu 捆绑在一起,也不能在这里工作,但它们在 Xorg 中工作。
相反,您可以使用
sudo -H
Run Code Online (Sandbox Code Playgroud)
编辑:
在 20.04(或者可能是 19.10,我不记得是什么时候)之前,将 sudo 用于 GUI 应用程序,尤其是文件管理器,可能会将您家中文件和文件夹的所有权更改为 root,从而完全消除您以身份登录系统的能力用户。系统使用 sudo 的方式发生变化意味着发生这种情况的危险现在已经消失,因此就该问题而言应该是安全的。
编辑结束
之后最好防止其他用户拥有的图形应用程序而不是登录用户,
xhost -si:localuser:root
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 17.10 (gvfs >= 1.29.4) 中,您可以使用 gvfs 管理后端。请注意,您需要完整路径,
gedit admin:///path/to/file
Run Code Online (Sandbox Code Playgroud)
理论上,gvfs 管理后端方法(使用 polkit)更好、更安全(比xhost
和xudo -H
),无论您使用什么 UI。
您不会以 root 身份运行整个应用程序。权限提升仅在绝对必要时发生。请参阅以下链接和其中的链接,
sisco311 在 Ubuntu 论坛主题中的回复“以 root 身份使用 gedit 的最佳做法是什么?”
这是帖子#4。另请参阅同一主题中的帖子 #6。
还可以nautilus-admin
用于具有提升权限的文件操作和使用gedit
提升的权限。这在以下 AskUbuntu 答案中有所描述,
gks
请避免sudo GUI-program
。它可能会导致系统使用 的配置覆盖您的常规用户 ID 的配置文件,root
并设置所有权和权限以适应root
和锁定您的常规用户 ID。您应该使用 运行 GUI 应用程序sudo -H
,它将配置文件写入root
的主目录中/root
。例子:
sudo -H gedit myfile.txt
Run Code Online (Sandbox Code Playgroud)
但是有一个你忘记的风险-H
。相反,您可以创建一个函数,例如gks
gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
Run Code Online (Sandbox Code Playgroud)
并将其存储在您~/.bashrc
的别名附近。然后你可以运行
gks gedit myfile.txt
Run Code Online (Sandbox Code Playgroud)
以类似于您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 ~ $
Run Code Online (Sandbox Code Playgroud)
而且当然
gks gedit myfile.txt
Run Code Online (Sandbox Code Playgroud)
根据上一节中的示例。
~/.bashrc
您可以创建一个无需 bash 也能工作的系统,而不是向 中添加一个简单的单行函数。使用起来可能很方便,但设置起来比较复杂。请注意,您应该只安装其中一种替代品,因为单线功能会干扰使用这个更复杂的系统。
脚本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;
Run Code Online (Sandbox Code Playgroud)
桌面文件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
Run Code Online (Sandbox Code Playgroud)
图标文件gks.svg
如下所示:
您可以从此链接下载图标文件或包含所有三个文件的 tarball,
将[提取或复制和粘贴]文件复制到以下位置,
sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons
Run Code Online (Sandbox Code Playgroud)
注销/登录或重新启动,并且应该有一个可用的桌面图标。它将在终端窗口中工作,就像使用该功能的简单解决方案一样。
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;
Run Code Online (Sandbox Code Playgroud)
桌面文件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
Run Code Online (Sandbox Code Playgroud)
我很懒,使用了相同的图标文件 gks.svg
将 [复制和粘贴] 文件复制到以下位置,
sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/
Run Code Online (Sandbox Code Playgroud)
gks[logo] 控制台和 xlogo:
小智 6
在授予root权限之前最好先检查wayland是否真的在运行
if [ $XDG_SESSION_TYPE = "wayland" ]; then
xhost +si:localuser:root
fi
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Ubuntu 17.04或更高版本,建议使用gvfs 管理后端。只需将admin://添加到您要在应用程序(如文本编辑器或文件应用程序)中打开的完整文件路径的前面。
例如,要更改启动设置,请打开
admin:///etc/default/grub
Run Code Online (Sandbox Code Playgroud)
此方法使用 PolicyKit,并且仍然适用于 Ubuntu 17.10 的 Wayland 默认设置,而用于 GUI 应用程序的 sudo 和 gksu 则不会。
归档时间: |
|
查看次数: |
42647 次 |
最近记录: |