如何将电源按钮设置为关机而不是挂起?


17

我在Dell E6530笔记本电脑上的Arch Linux 4.2.5-1-ARCH x86_64上使用GNOME 3.18.1。自从几年前安装此操作系统以来,笔记本电脑上的电源按钮一直使我的操作系统完全关机。

但是,在过去的几周中,这种行为已经改变,因此现在按下电源按钮可使笔记本电脑进入节能模式。我没有更改电源设置。我始终使用来更新系统pacman -Syyu,因此,我怀疑有更新更改了此功能。

在电源设置中,没有此选项。

如何恢复初始行为,以便按该按钮可以关闭系统电源?


2
@Konrad第二步,您可能要验证Gnome确实是罪魁祸首。那是一个假设。如果尝试更换壳,您可能会学到一些东西。您还能列出您为调试此问题采取了哪些步骤。
莎拉·温伯格2015年

1
发生了什么变化?你有升级吗?您正在运行什么操作系统(包括版本)?在什么硬件上?它工作时在运行什么?
吉尔斯(Gillles)“所以-别再邪恶了”

抱歉,缺少信息,我更新了我的帖子。
KonradHöffner2015年

Answers:


16

这是由最新gnome-settings-daemon更新引起的... 电源设置中
没有这样的选项,因为GNOME开发人员已将删除(该操作被认为是“破坏性太大”)。 底线:您无法再通过按电源关闭按钮来关闭笔记本电脑的电源shutdown/power off


但是,如果您愿意进行修补和重建,则可以在设置守护进程电源插件中添加一个新的dconf/ gsettings选项(即shutdowngnome-settings-daemon

--- gnome-settings-daemon-3.18.2/data/gsd-enums.h   2015-11-10 09:07:12.000000000 -0500
+++ gnome-settings-daemon-3.18.2/data/gsd-enums.h   2015-11-11 18:43:43.240794875 -0500
@@ -114,7 +114,8 @@
 {
   GSD_POWER_BUTTON_ACTION_NOTHING,
   GSD_POWER_BUTTON_ACTION_SUSPEND,
-  GSD_POWER_BUTTON_ACTION_HIBERNATE
+  GSD_POWER_BUTTON_ACTION_HIBERNATE,
+  GSD_POWER_BUTTON_ACTION_SHUTDOWN
 } GsdPowerButtonActionType;

 typedef enum
--- gnome-settings-daemon-3.18.2/plugins/media-keys/gsd-media-keys-manager.c    2015-11-10 09:07:12.000000000 -0500
+++ gnome-settings-daemon-3.18.2/plugins/media-keys/gsd-media-keys-manager.c    2015-11-11 18:47:52.388602012 -0500
@@ -1849,6 +1849,9 @@

         action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
         switch (action_type) {
+        case GSD_POWER_BUTTON_ACTION_SHUTDOWN:
+                do_config_power_action (manager, GSD_POWER_ACTION_SHUTDOWN, in_lock_screen);
+                break;
         case GSD_POWER_BUTTON_ACTION_SUSPEND:
                 do_config_power_action (manager, GSD_POWER_ACTION_SUSPEND, in_lock_screen);
                 break;

安装修补程序版本后,在org> gnome> settings-daemon>插件> power> power-button-actionshutdown将提供一个新选项:dconf-editor

在此处输入图片说明

因此,请选择通过电源按钮关闭它,或者,如果您更喜欢CLI,请在终端中运行:

gsettings set org.gnome.settings-daemon.plugins.power power-button-action shutdown

当然,要使以上各项正常工作,您还需要在中进行正确的设置/etc/systemd/logind.conf

HandlePowerKey=poweroff
PowerKeyIgnoreInhibited=yes

请记住,按电源按钮将在没有任何警告的情况下关闭系统。


6
真令人失望,我一直以为Linux是操作系统,即使有危险,用户也可以自行决定。但是,非常感谢您发现了这一点,至少我不浪费时间寻找不存在的修复程序。
KonradHöffner,2015年

非常感谢您提供详细的解决方案。尽管安装了gnome-settings-daemon 3.18.2-1,但是我的安装具有不同的文件:gsd-enums.h位于文件夹中/usr/include/gnome-settings-daemon-3.0/gnome-settings-daemon/gsd-media-keys-manager.c根本不存在。
KonradHöffner2015年

开发者撤消了他的决定,并在gnome-settings-daemon 3.20中恢复了交互式选项。(我想。我还没有更新到那个版本。)
idbrii '16

1
@idbrii-好吧,我对您有个坏消息:我在3.22上,没有关机选项。
don_crissti

6

正如@don_crissti所解释的,这种情况很愚蠢,因为在没有使用正常设置进行确认的情况下,真的不可能仅关机。

但是,有一种解决方法:如果计算机的机箱类型设置为“ vm”(虚拟机),则旧的立即关闭行为将接管所有设置。只需以root身份输入:

hostnamectl set-chassis vm

然后重启一次。我不知道此设置有任何副作用。


1
我已在电源按钮问题上关注了很长时间的链接。我们的应用程序具有无键盘/无鼠标配置的“仅查看”模式,该模式需要每晚由非技术人员关闭。当失去通过电源按钮关闭的功能时,他们只需拔下插头即可。该解决方案对我们来说非常有用,并且是迄今为止最简单的方法。
MikeV '18

4

在Ubuntu 18.04或任何类似的Linux与ACPI变种(如果没有可以或许安装),创建一个名为文件/etc/acpi/events/power

sudo nano /etc/acpi/events/power

并把

event=button/power
action=/sbin/poweroff

在文件中,将其关闭,然后

sudo service acpid restart

这可能是绝对有效的最简单的解决方案。


1
此解决方案在我的情况下非常有效:安装了gnome-desktop且处于无头模式的ubuntu服务器18.04(连接显示器时不需要)。谢谢 !
M-Jack,

3

或者,您可以打开键盘设置窗口,并为命令分配自定义键盘快捷方式gnome-session-quit --power-off,这将显示关闭菜单。我将其设置为通过Super+ 触发q


2

第一步,请确保“设置” |“设置”。电源(假设Gnome v3)“挂起和关闭电源” /“自动挂起”设置为关闭。基本上,禁用GNOME电源设置功能,然后让系统接管。


0

自定义键盘快捷方式有效,我gnome-session-quit --power-off --force只需要按电源按钮即可将其设置为所需。


1
真?对我来说这是行不通的。该按钮仍然根据power-button-action选项运行。我可以将其设置Ctrl+PowerOff为快捷键。
阿列克谢

对我来说同样的问题。@Alexey
康拉德·霍夫纳

0

我找到了另一个在Debian Stretch上完成此操作的选项。我安装了软件包acpi-support-base并编辑了文件/etc/acpi/powerbtn-acpi-support.sh,在标题注释之后和任何代码之前添加了以下几行。

## Bypass logic to force shutdown on power button
/sbin/shutdown -h -P now "Power button pressed"
exit 0

这有点钝,但在台式机上对我有用,在笔记本电脑上也可以。它还绕过了Gnome3设置,但是比修补Gnome和重新编译要容易得多。

根据Arch Wiki页面上的内容,acpid可以通过/etc/acpi/handler.sh在Arch上进行修改来实现。


0

我通过监视以下服务器的日志输出在我的服务器上解决了此问题: systemd-logind基本上是在完善其他答案中提出的解决方案。

此解决方法需要两个文件。触发实际关机事件的脚本

$ cat /usr/local/bin/shutdown_button_monitor.sh
#!/bin/sh

# ansible managed

# systemd-logind prints a line of the form 
# Dez 21 11:12:10 box03.yeepa.de systemd-logind[748]: Power key pressed.
# on key press, but doesn't handle the button because gnome3 blocks systemd from doing so.
# See `systemd-inhibit` for that.

# first sleep a minute so we have chance to disable this scritp if it runs amok
sleep 1m

# so we workaround gnome a bit here.
journalctl -u systemd-logind --follow --lines=0 | \
while read line ; do
    if echo "$line" | grep --quiet 'Power key pressed'
    then
        systemctl poweroff
    fi
done

以及启动/重新启动它的服务文件

$ cat /etc/systemd/system/shutdown_button_monitor.service
# ansible managed

[Unit]
Description=Power off the machine if the power button is pressed
# Workaround for gnomes block of the shutdown button
# /unix/242129/gnome-3-how-to-set-power-button-to-shutdown-instead-of-suspend#242452
# Monitor these blocks yourself with `systemd-inhibit`

[Service]
User=root
ExecStart=/usr/local/bin/shutdown_button_monitor.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.