找回密码
 立即注册
首页 业界区 业界 小心误关了NAS服务器!修改Linux的电源键功能 ...

小心误关了NAS服务器!修改Linux的电源键功能

乙荒 2025-7-16 00:07:16
前言

事情是这样的
今天想用NAS上的服务突然发现NAS离线了
我看了下原来是关机了
很奇怪,这几天也没断电啊…
我又去分析了系统日志
注意到了关机前的这段日志
  1. Jul 13 23:24:33 pve systemd-logind[1062]: Power key pressed short.
  2. Jul 13 23:24:33 pve systemd-logind[1062]: Powering off...
  3. Jul 13 23:24:33 pve systemd-logind[1062]: System is powering down.
  4. Jul 13 23:24:33 pve systemd[1]: 104.scope: Deactivated successfully.
复制代码
原来是不小心按了电源键
那这不行啊,NAS可不能一不小心就关机了
修改电源键功能

在 Linux(包括 PVE)中,电源键的行为是由 systemd-logind 控制的,你不仅可以禁用它,还能改成其他操作,比如:挂起(suspend)、休眠(hibernate)、锁屏、忽略(ignore)等。
编辑 logind 配置文件

打开配置文件:
  1. sudo nano /etc/systemd/logind.conf
复制代码
找到这行(如果没有就添加):
  1. HandlePowerKey=poweroff
复制代码
然后改成想要的行为,比如:
选项行为说明ignore忽略按键(推荐用于NAS)poweroff关机(默认)reboot重启halt关机但不切断电源kexec快速重启suspend挂起(休眠到RAM)hibernate休眠(保存状态到磁盘)hybrid-sleep挂起+休眠lock锁屏(可能需要桌面环境支持)重启 logind 服务以生效
  1. sudo systemctl restart systemd-logind
复制代码
扩展

自定义脚本

如果想要让按电源键触发自定义脚本,可以这样操作:

  • 设置 HandlePowerKey=ignore,避免 systemd 接管。
  • 使用 acpid 监听 /etc/acpi/events/powerbtn,触发你自己的脚本。
对于大多数 PVE 用户,把 power key 设置为 ignore 是最稳妥的方案,可以避免误关机、误触等麻烦。
其他设置

如果是拿笔记本做服务器的话,还可以配置合盖功能什么的
  1. # /etc/systemd/logind.conf
  2. HandlePowerKey=ignore
  3. HandleRebootKey=ignore
  4. HandleSuspendKey=ignore
  5. HandleLidSwitch=ignore       # 如果有笔记本机箱盖
  6. HandleLidSwitchDocked=ignore
复制代码
配置项速查表

以下是 /etc/systemd/logind.conf 文件里的配置说明
配置项含义说明NAutoVTs=6自动生成的虚拟终端(tty)的数量。默认系统会生成 /dev/tty1 到 /dev/tty6。ReserveVT=6systemd-reserved 的虚拟终端编号(用于图形界面切换或紧急使用)。KillUserProcesses=no用户退出登录后是否强制终止其所有进程。KillOnlyUsers=仅对这些用户启用 KillUserProcesses 行为(白名单控制)。KillExcludeUsers=root排除哪些用户不受 KillUserProcesses 控制(默认排除 root)。InhibitDelayMaxSec=5在被抑制的关机/挂起行为上,等待的最长时间(秒)。UserStopDelaySec=10用户注销后等待多长时间再真正终止 session。HandlePowerKey=poweroff按下电源键时的操作(默认是关机)。HandlePowerKeyLongPress=ignore长按电源键时的操作(默认是忽略)。HandleRebootKey=reboot按下“重启按钮”时的操作。HandleRebootKeyLongPress=poweroff长按“重启按钮”时的操作。HandleSuspendKey=suspend按下挂起键时的操作(通常是笔记本或某些键盘上的 Sleep 键)。HandleSuspendKeyLongPress=hibernate长按挂起键时的操作。HandleHibernateKey=hibernate按下休眠键时的操作。HandleHibernateKeyLongPress=ignore长按休眠键时的操作。HandleLidSwitch=suspend合上笔记本盖子时的操作(默认是挂起)。HandleLidSwitchExternalPower=suspend笔记本连接外部电源时合盖的操作。HandleLidSwitchDocked=ignore笔记本插入扩展坞时合盖的操作(默认忽略)。PowerKeyIgnoreInhibited=no是否忽略用户程序对电源键操作的抑制(inhibit)。SuspendKeyIgnoreInhibited=no是否忽略程序对挂起键的抑制。HibernateKeyIgnoreInhibited=no是否忽略程序对休眠键的抑制。LidSwitchIgnoreInhibited=yes是否忽略程序对合盖操作的抑制(通常设置为 yes)。RebootKeyIgnoreInhibited=no是否忽略程序对重启键的抑制。HoldoffTimeoutSec=30s防抖动保护:相邻两个事件之间的最小时间间隔。IdleAction=ignore空闲太久之后的操作(默认忽略)。IdleActionSec=30min判断空闲的时间(配合 IdleAction 使用)。RuntimeDirectorySize=10%每个用户的 /run/user/UID 目录可使用的最大空间(相对于内存总量)。RuntimeDirectoryInodesMax=每个用户的 /run/user/UID 可使用的最大 inode 数(未设置即不限)。RemoveIPC=yes用户退出登录后是否清除其 IPC(消息队列、信号量、共享内存)。InhibitorsMax=8192最大支持的 inhibit 锁数量(用于限制暂停/关机等)。SessionsMax=8192最大支持同时活跃的会话数。StopIdleSessionSec=infinity空闲会话保持多久之后自动终止(默认不终止)。参考资料


  • systemd-logind.service - logind服务官方文档
  • logind.conf.d(5) - 支持通过 drop-in 文件扩展 logind 配置
  • Inhibitor Locks - 控制程序如何暂时禁止系统挂起/关机等行为(比如视频播放时不让休眠)
也可以在系统上直接用 man 命令看
  1. man logind.conf
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册