如何防止电源按钮直接关闭系统?

我刚安装了Ubuntu 13.10。当我按下电源按钮时,我的计算机立即关机。在Ubuntu 13.04中,我有一个很好的菜单,我可以选择要做什么。现在它不见了,我想要它回来。这是我的/etc/acpi/powerbtn.sh文件链接:在pastebin上
我已经做过了。
gsettings set org.gnome.settings-daemon.plugins.power button-WORD 'interactive'

其中WORD休眠电源睡眠挂起


1我查看了我的/etc/acpi/powerbtn.sh文件,发现它什么都没做。 我所说的菜单可以通过命令gnome-session-quit --power-off来召唤。 - Wauzl
哈哈。真希望在我四处寻找那个命令之前能看到你的评论。 - user128334
我的答案对你不起作用吗? - user128334
我给你的答案点了赞,我相信它本来会起作用的;我重新安装了整个系统。我还遇到了一些其他问题。这(显然)对我解决了问题。 - Wauzl
啊,好的。刚刚看到你在网站上停留了一下,没有留下评论,所以以为通知可能丢失了。奇怪,完全重新安装解决了这个问题?你下载了最新的13.10版本吗?我进行了全新安装,也遇到了这个问题。 - user128334
当我升级到13.10版本时,我进行了一次“全新安装”,但是我只带了我的旧的/home/user文件夹。然后我遇到了上述描述的问题(以及其他一些问题)。在格式化我的/和/home/user驱动器并进行完全干净的全新安装之后,一切都正常工作了。(当然,我备份了我的重要文件。)现在我有一个运行良好的系统,而且我还将我的/home/user文件夹的大小最小化了。 :) - Wauzl
关掉系统(没有提示或菜单)是一个相当令人烦恼的默认操作,对于电源按钮来说。 - golimar
4个回答

检查您的 /etc/systemd/logind.conf 文件。它应该如下所示:

[Login]
#NAutoVTs=6
#ReserveVT=6
#KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
#Controllers=
#ResetControllers=cpu
#InhibitDelayMaxSec=5
#HandlePowerKey=poweroff
#HandleSuspendKey=suspend
#HandleHibernateKey=hibernate
#HandleLidSwitch=suspend
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
#LidSwitchIgnoreInhibited=yes
#IdleAction=ignore
#IdleActionSec=30min

取消注释那行写着#HandlePowerKey=poweroff的代码,并将值改为ignore
然后使用命令sudo systemctl restart systemd-logind重新启动logind,或者重新启动您的计算机。 编辑:如何创建一个新的acpi处理程序/etc/acpi/events/中创建一个新文件。文件的内容应该是:
event=<acpi_event_code>
action=<script_to_call>

其中<acpi_event_code>是使用acpi_listen工具获取的代码,而<script_to_call>是当事件发生时您希望调用的脚本的完整路径。

他们在13.10中肯定改变了一些东西,因为与13.04相比,我的/etc/accpi/events文件夹中的文件似乎太少了。


这不会让我心爱的菜单恢复。现在,当我按下电源按钮时,它什么也不做。 - Wauzl
如果在按下电源按钮时实际上执行了powerbtn.sh脚本,你可以尝试让它在X服务器运行且gnome是你的桌面环境时执行关机菜单命令。查看export命令的输出以确定要测试哪些变量。如果根本没有执行powerbtn.sh脚本,你可以尝试通过运行acpi_listen并按下电源按钮来查看要绑定到的acpi事件。此外,也许在gnome中有一个选项可以恢复电源菜单,但我不确定,因为我已经很久没有使用gnome了。 - jeremija
我尝试了一下,powerbtn.sh(可能)没有被执行,因为当我按下按钮时没有任何反应。acpi_listen告诉我按钮触发了一个acpi事件。不幸的是,我的音量增加和减少键也不起作用。也许这是相关的问题? - Wauzl
你可以尝试以下命令:grep "<acpi_event_code>" /etc/acpi/events/*,其中<acpi_event_code>是你在acpi_listen中看到的acpi事件代码。如果有结果,查看该文件并查看它调用的脚本名称。如果没有结果,你可以尝试在/etc/acpi/events/目录下添加一个新文件。更多详细信息请参考编辑后的答案。 - jeremija
请确认这个在我的Mac上能够与16.04 LTS版本兼容。 - Benjamin R
1在运行 sudo systemctl restart systemd-logind 之前,请记得保存您的工作,因为它会突然终止您的X会话和所有正在运行的程序。 - Daniel

jeremijah帮我找到了正确的方向,所以要给他点赞!
我按照建议编辑了/etc/systemd/logind.conf文件,但我还做了this

如果上述解决方案对您无效, 这里有一个快速的解决方法:
  • 安装xtrlock

这个实用工具可以为您完成工作。尽管这可能不能回答问题, 但在我尝试过的许多解决方案中(包括本页面上的解决方案),似乎都不起作用。

安装方法:

sudo apt install xtrlock 

使用方法: 在命令行中输入xtrlock。这将冻结鼠标和键盘。 要解锁,请输入密码并按下[Enter]

它还可以冻结你的电源按钮。

P.S 这个解决方案对那些有孩子并且希望禁用电源按钮的人特别有用。

xtrlock - 锁定X显示,直到输入密码为止,同时保持窗口可见 来源:http://manpages.ubuntu.com/manpages/artful/man1/xtrlock.1x.html


请详细说明您的回答。这个应用程序在软件仓库中可用吗?您是如何安装它的,通过命令行还是通过Ubuntu软件中心?如果是通过命令行安装的,您使用了哪个命令?您是否进行了配置,如果是,具体是如何配置的? - user68186
sudo apt install xtrlock -y - Nakamoto

首先,你可以编辑你的键位图文件,将电源按钮的行为更改为分配给其他按键。
编辑文件:/usr/share/X11/xkb/symbols/inet(编辑POWR键)。
然后,你需要有效地禁用电源按钮,一个好的方法是使用xinput。
运行xinput --list,电源按钮有自己的条目...选择设备号,然后运行。 xinput disable 设备号,类似于xinput disable 8