从用户切换菜单中删除关机、挂起、重启和休眠

从用户切换菜单中删除关机、挂起、重启和休眠

我使用台式机作为本地网络的路由器和多个用户的普通台式机。我在其上运行 Maverick。偶尔,某个台式机用户会意外按下关机、重启、挂起或休眠按钮,导致我不得不在一天中的随机时间修复网络。我知道如何从命令行重启和关机。我不需要 GUI 界面。

如何从用户切换菜单中删除关机、暂停、重启和休眠选项?我想要的只是“锁定屏幕”、“访客会话”、用户列表和“注销”。

系统范围的解决方案是最好的,但如果有必要,我可以对每个用户都做一个。

答案1

选项1:

安装gconf-编辑器,运行gksu gconf-editor并在 /apps/indicator-session/ 上抑制重启和关闭。

我不确定暂停和休眠,也许改为<allow_active>开启no/usr/share/polkit-1/actions/org.freedesktop.upower.policy可以了。


选项 2:

去除指标会话打包并添加桌面快捷方式以注销和锁定屏幕。

注销命令是gnome-session-save --logout-dialog,锁定屏幕使用gnome-screensaver-command --lock

答案2

对于 Ubuntu 14.04 和 16.04 (Unity)

用于gsettings禁用指示器会话菜单中的大多数菜单项,并用于systemctl在 systemd 级别禁用挂起功能本身。但此解决方案并不完美。

如何禁用菜单项

首先用gsettingscommand查找相关键,然后用command过滤grep,用“session”和“menu”作为关键字进行两次过滤。

$ gsettings list-recursively | grep session | grep menu
com.canonical.indicator.session suppress-logout-menuitem false
com.canonical.indicator.session force-restart-menuitem false
com.canonical.indicator.session suppress-restart-menuitem false
com.canonical.indicator.session suppress-shutdown-menuitem false
com.canonical.indicator.session user-show-menu true

然后,使用 将gsettings相关键设置为与当前值相反的值,即“false”变为“true”,反之亦然。逐个运行以下命令。

$ gsettings set com.canonical.indicator.session suppress-shutdown-menuitem true
$ gsettings set com.canonical.indicator.session suppress-restart-menuitem true
$ gsettings set com.canonical.indicator.session suppress-logout-menuitem true
$ gsettings set com.canonical.indicator.session user-show-menu false

为了使suppress-logout-menuitem密钥生效,用户可能需要重新加载 Unity 桌面(unity在终端或 HUD 命令提示符中运行命令,无需注销或执行任何操作)。

这就是隐藏大多数菜单项所需要做的全部操作。

在指示器会话中禁用菜单项之前和之后

按照上述步骤,指示器会话菜单中的所有菜单项现在都已隐藏,除了“暂停”菜单项。有一个打开错误关于无法隐藏Suspend菜单项的问题。确认并订阅它可能会促进其解决。

鉴于菜单项不能直接被抑制,下一个最简单的解决方案是在系统范围级别禁用任何暂停。

如何在 Ubuntu 14.04(Unity、upstart)中禁用挂起

在 14.04 版本中,有几种方法可以禁用暂停功能,例如编辑polkit-1或的配置文件pm-utils。但尚不清楚哪种方法实际上可以正常工作。

如何在 Ubuntu 16.04(Unity,systemd)中禁用挂起

在 16.04 版本中,使用 systemd 禁用任何暂停Debian Wiki 上提到

$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Created symlink from /etc/systemd/system/sleep.target to /dev/null.
Created symlink from /etc/systemd/system/suspend.target to /dev/null.
Created symlink from /etc/systemd/system/hibernate.target to /dev/null.
Created symlink from /etc/systemd/system/hybrid-sleep.target to /dev/null.

systemctl命令将立即生效。无需重启或执行任何其他操作。

因此,每当单击“暂停”菜单项时,系统不会进入睡眠状态,而只会导致屏幕变为空白并返回到登录屏幕(类似于“锁定屏幕”的效果)。

暂停后已知问题的解决方法

即使没有实际暂停,恢复当前会话时也会出现相同的已知问题:网络管理器在暂停后未唤醒。解决方法是重新启动服务。

$ sudo systemctl restart network-manager.service

网络管理器将重新启动并且网络将再次可用。

以上所有功能均在 Ubuntu 16.04(Unity)中测试通过,并全新安装在 VirtualBox 中。

答案3

对于挂起和休眠,可以使用 中的文件,而不必编辑将在包更新时替换的包文件/etc/polkit-1/localauthority。使用包含 的文件禁用挂起/etc/polkit-1/localauthority/90-mandatory.d/disable-suspend.pkla

[Disable suspend]
Identity=unix-user:*
Action=org.freedesktop.upower.suspend
ResultActive=no

/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla这是受到包含禁用休眠配置等内容的文件的启发:

[Disable hibernate by default]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=no

至少,这是我在 Ubuntu 12.04 上使用的。

有关 PolicyKit 地方当局的更多信息:http://hal.freedesktop.org/docs/polkit/pklocalauthority.8.html

相关内容