我使用台式机作为本地网络的路由器和多个用户的普通台式机。我在其上运行 Maverick。偶尔,某个台式机用户会意外按下关机、重启、挂起或休眠按钮,导致我不得不在一天中的随机时间修复网络。我知道如何从命令行重启和关机。我不需要 GUI 界面。
如何从用户切换菜单中删除关机、暂停、重启和休眠选项?我想要的只是“锁定屏幕”、“访客会话”、用户列表和“注销”。
系统范围的解决方案是最好的,但如果有必要,我可以对每个用户都做一个。
答案1
答案2
对于 Ubuntu 14.04 和 16.04 (Unity)
用于gsettings
禁用指示器会话菜单中的大多数菜单项,并用于systemctl
在 systemd 级别禁用挂起功能本身。但此解决方案并不完美。
如何禁用菜单项
首先用gsettings
command查找相关键,然后用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