root 为什么不用 gksu/gksudo或者启动一个图形应用程序来使Wayland工作?

分享于 

8分钟阅读

ubuntu

  繁體

问题

我安装了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中,通常很难以较高的权限(sudo -H,gksu ...)运行GUI应用程序。使用命令行工具执行这些任务是一个好主意。

但是有一些变通办法,

xhostsudo -H

在Wayland中,有一种方法允许其他用户拥有的图形应用程序,


xhost +si:localuser:root



gksugksudo没有与标准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更好,更安全。

nautilus管理

还可以将nautilus-admin用于有提升权限的文件操作,并将gedit与提升的权限一起使用。

通过gks临时访问root的Wayland桌面

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


sudo -H gedit myfile.txt




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



把它放在你~/.bashrc。然后你可以运行


gks gedit myfile.txt



你可以检查sudosudo -Hgks,如何使用以下命令


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菜单工作的方法

三个文件

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如下所示:

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

wiki.ubuntu.com/Wayland/gks

将[extracted or copied & pasted]文件复制到以下位置,


sudo cp gks /usr/bin


sudo cp gks.desktop /usr/share/applications/


sudo cp gks.svg /usr/share/icons



注销/登录或重新启动,并且应该有一个工作桌面图标。

自定义脚本和桌面文件

如果只有少数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



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


sudo cp gkslogo /usr/bin


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



gks [logo]控制台和xlogo:


答案2

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


if [ $XDG_SESSION_TYPE ="wayland" ]; then


 xhost +si:localuser:root


fi




答案3

如果你使用的是Ubuntu 17.04或更高版本,建议使用gvfs管理后端,只需将admin://添加到要在完整文件路径的前面。

例如要更改启动设置,请打开


admin:///etc/default/grub



此方法使用PolicyKit,并且仍可与Ubuntu 17.10的Wayland默认设置一起使用,而GUI应用程序的sudo和gksu则无效。



运行  roo  ROOT  SUDO  launching  wayland