目前,对于所有需要 root 访问权限的命令,我都必须在命令行中输入它们。
当需要 sudo 时,我希望 GUI 提示我输入密码,而不是必须从命令行输入命令。
有什么方法可以启用此功能?以前 Ubuntu 桌面的一个版本就有此功能。
我现在正在运行的这个 Ubuntu 版本是我从服务器安装升级而来的。
我要补充的是,我的用户帐户已添加到 sudo 组。因此我可以运行诸如sudo gedit
或之类的命令sudo apt-get
,但无法在 Ubuntu 软件中心安装软件。
答案1
总结:尝试安装policykit-1
和policykit-1-gnome
包。
您可能需要 polkit (又名 PolicyKit)。
Ubuntu 中的大多数图形系统管理实用程序(包括软件中心)通常都可以在没有sudo
或类似程序的情况下运行。您只需像运行任何程序一样运行它们即可。
当需要执行需要 root 权限的任务时,他们会使用波尔基特执行所需的操作。polkit 是一种独立于 sudo 的机制,允许管理员以 root 身份执行操作。它安装在桌面 Ubuntu 系统上,但默认情况下不是 Ubuntu Server 安装的一部分。
因此,软件中心的正常行为是,您可以简单地调用它software-center
,它不会提示您进行身份验证,但是当您告诉它安装或删除软件时,它会(以图形方式)提示您进行身份验证。
从你的描述来看,你的系统一开始是一个没有 GUI 的 Ubuntu Server 系统,然后你安装了 GUI。可能是policykit-1和policykit-1-gnome软件包尚未安装。如果您安装了,polkit 很可能会开始为软件中心和其他此类实用程序工作。
sudo apt-get update
sudo apt-get install policykit-1 policykit-1-gnome
然后你就可以运行:
software-center
(或者按照您安装的桌面环境所提供的图形方式选择软件中心。)
如果如果你想要一个功能齐全的 Ubuntu 桌面系统,我建议安装你想要将系统变成的 Ubuntu 的任何“风格”的元包。基本上,如果你想要一个普通的 Ubuntu 桌面系统,请安装Ubuntu 桌面。
sudo apt-get update
sudo apt-get install ubuntu-desktop
这应该可以弥补在服务器系统上安装更精简的 GUI 所带来的各种缺陷,例如没有 polkit。另一方面,如果您更喜欢更精简的 GUI,您可以直接安装那些 polkit 包。
有关详细信息,请参阅For more information, see如何运行带有 GUI 的 Ubuntu Server?
sudo
具有图形验证。
如果你确实需要以 root 身份运行命令但得到一个图形身份验证对话框,那么你要找的是gksudo
(或者gksu
)由堪萨斯州立大学包。它是 的图形前端sudo
。
通常gksudo
用于以 root 身份(或启动这些应用程序的用户之外的其他用户)运行图形应用程序。但您也可以使用它来运行非图形命令——前提是这些命令可以使用 运行sudo
。
您可以gksudo
从终端运行,但这不是必须的。您可以从Alt+ F2(运行命令)对话框运行它,也可以将其放在文件Exec=
的行中.desktop
(或以任何其他方式运行图形程序)。
gksudo
请注意,即使您是从终端运行图形应用程序,也应该考虑以 root 身份运行它们,因为像图形应用程序在sudo ...
哪里这样的命令...
实际上可能会破坏运行它们的非 root 用户的每个应用程序的配置。 (幸运的是,这是可以修复的。) sudo gedit
尤其臭名昭著。
有关图形应用程序的问题sudo
以及如何解决的详细信息,请参见:
- 为什么用户永远不应该使用普通的 sudo 来启动图形应用程序?
- Ubuntu 帮助 wiki 中的 RootSudo
man sudo
对于-H
和-i
选项。sudo -H ...
和sudo -i ...
不进行图形验证,但就像gksudo ...
它们没有普通的问题一样sudo ...
。
还有基于 polkit 的图形方式...用于非图形命令。
gksudo
运行图形和非图形程序都很好。你应该使用它。
但另一种方法是使用 polkit 代替,sudo
并且只适用于非图形化程序,是pkexec
。
例如,如果您运行pkexec touch /root/foo.txt
,系统将提示您显示一个图形身份验证对话框,如果身份验证成功,touch /root/foo.txt
则运行 ,创建(或清新)文件夹foo.txt
中/root
。
pkexec
如果无法创建图形对话框,则将使用非图形对话框,需要终端。但是,如果您通过图形 shell 或桌面环境提供的工具运行它,则不太可能发生这种情况。- 为什么
pkexec
只适用于非-图形程序?实际上,它也可以运行图形程序,但前提是 polkit 已特别配置为允许它 - 通常不会这样做。请参阅man pkexec
(和上游版本,附有屏幕截图),这个答案和那个答案如果您有兴趣的话,可以查看更多详细信息。
sudo
对阵波尔基特(一些技术细节,仅当你感兴趣时)
新的gksu
/gksudo
将使用 polkit 而不是sudo
来完成其工作,尽管这个版本还没有被广泛采用。我主要提出它来推荐README
源代码中的文件(由 Gustavo Noronha Silva 撰写),其中解释了和 polkit 之间的重要区别sudo
。简要引用一下:
PolicyKit 解决了应用程序需要更高权限的问题,它提供了一些功能,让用户能够验证自己的身份,并让应用程序验证身份验证和授权信息。应用程序必须以这样的方式构建,即所有特权操作都由(最好是)小型 D-Bus 服务完成,该服务由非特权代码控制。执行的所有“操作”都需要适当的授权,这通过 Policykit 来处理。
4.为什么要维护 gksu?
因此,这实际上使得 gksu 变得没有必要,因为应用程序不再需要以特权用户身份运行,用户身份验证由 PolicyKit 的 Auth Agent 完成。但应用程序需要重构才能采用这种新结构,在某些情况下,您确实需要以 root 身份运行程序。
我认为,您所处的状况主要存在以下问题:
- 软件中心旨在使用 polkit 来提升权限,因此只需要以 root 身份执行特定操作。为此,它需要 polkit,但您的系统上缺少(或损坏)了它。
- 因为它是为使用 polkit 而设计的,所以没有预制的启动器来以 root 身份启动软件中心。大多数时候,polkit 消除了以 root 身份运行图形管理工具的需要。
- 但有时您确实需要以 root 身份运行图形程序。在这种情况下,您可以使用
gksu
/gksudo
。
(...最终可能会在后台使用 polkit——但gksudo
目前 Ubuntu 中的 是使用 的传统版本sudo
)。
答案2
一种方便的方法是创建一个专用.desktop
文件,或将您的命令添加到现有文件中,通过 GUI (gksu) 询问您的密码。在下面的示例中,我将使用 sudo 权限运行 Gedit 和软件中心的命令添加到 Gedit 启动器。您需要安装gksu
才能使用此设置:sudo apt-get install gksu
复制 Gedit
.desktop file in
/usr/share/applications/~/.local/share/applicationsto
:cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
并打开它进行编辑(将其拖到打开的 gedit 窗口上)
查找行:Actions=Window;Document;
将命令的名称添加到行中(这些不是您在界面中看到的名称,仅用于文件中的内部引用)
Actions=Window;Document;gedit;Ubuntu Software Center;
在文件底部添加相应部分:
[Desktop Action gedit] Name=Gedit (with gksu) Exec=gksudo gedit OnlyShowIn=Unity; [Desktop Action Ubuntu Software Center] Name=Ubuntu Software Center (with gksu) Exec=gksudo /usr/bin/software-center OnlyShowIn=Unity;
关闭文件并将其拖到启动器上
现在您可以使用 sudo 权限运行 gedit 和软件中心:
答案3
gksu 已被弃用。
它已从 Ubuntu 18.04 以及 Debian 和其他较新的 Linux 发行版中删除。如果您使用短语“Ubuntu man gksu”进行网络搜索,您会发现没有可用的 18.04 版本。以下是替代方案:
替代[0]:使用“-H”
sudo -H nautilus
替代方案[1]: 使用 "admin://"
gedit admin:///etc/udev/rules.d/somefile.rules
替代方案[2]: 使用“pkexec”
pkexec gedit