小心误关了NAS服务器!修改Linux的电源键功能
前言
事情是这样的
今天想用NAS上的服务突然发现NAS离线了
我看了下原来是关机了
很奇怪,这几天也没断电啊…
我又去分析了系统日志
注意到了关机前的这段日志
Jul 13 23:24:33 pve systemd-logind[1062]: Power key pressed short.
Jul 13 23:24:33 pve systemd-logind[1062]: Powering off...
Jul 13 23:24:33 pve systemd-logind[1062]: System is powering down.
Jul 13 23:24:33 pve systemd[1]: 104.scope: Deactivated successfully.
原来是不小心按了电源键
那这不行啊,NAS可不能一不小心就关机了
修改电源键功能
在 Linux(包括 PVE)中,电源键的行为是由 systemd-logind
控制的,你不仅可以禁用它,还能改成其他操作,比如:挂起(suspend)、休眠(hibernate)、锁屏、忽略(ignore)等。
编辑 logind 配置文件
打开配置文件:
sudo nano /etc/systemd/logind.conf
找到这行(如果没有就添加):
HandlePowerKey=poweroff
然后改成想要的行为,比如:
选项 | 行为说明 |
---|---|
ignore |
忽略按键(推荐用于NAS) |
poweroff |
关机(默认) |
reboot |
重启 |
halt |
关机但不切断电源 |
kexec |
快速重启 |
suspend |
挂起(休眠到RAM) |
hibernate |
休眠(保存状态到磁盘) |
hybrid-sleep |
挂起+休眠 |
lock |
锁屏(可能需要桌面环境支持) |
重启 logind 服务以生效
sudo systemctl restart systemd-logind
扩展
自定义脚本
如果想要让按电源键触发自定义脚本,可以这样操作:
- 设置
HandlePowerKey=ignore
,避免 systemd 接管。 - 使用
acpid
监听/etc/acpi/events/powerbtn
,触发你自己的脚本。
对于大多数 PVE 用户,把 power key 设置为 ignore 是最稳妥的方案,可以避免误关机、误触等麻烦。
其他设置
如果是拿笔记本做服务器的话,还可以配置合盖功能什么的
# /etc/systemd/logind.conf
HandlePowerKey=ignore
HandleRebootKey=ignore
HandleSuspendKey=ignore
HandleLidSwitch=ignore # 如果有笔记本机箱盖
HandleLidSwitchDocked=ignore
配置项速查表
以下是 /etc/systemd/logind.conf
文件里的配置说明
配置项 | 含义说明 |
---|---|
NAutoVTs=6 |
自动生成的虚拟终端(tty)的数量。默认系统会生成 /dev/tty1 到 /dev/tty6 。 |
ReserveVT=6 |
systemd-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 命令看
man logind.conf
小心误关了NAS服务器!修改Linux的电源键功能的更多相关文章
- 修改ubuntu按电源键触发效果
GUI内终端执行如下指令,或者加入开机启动脚本内 gsettings set org.gnome.settings-daemon.plugins.power button-power shutdown ...
- 云服务器 ECS Linux 服务器修改时区的两种方式
在云服务器 ECS Linux 系统中,以 Centos6.5 为例,可以通过如下两种方式,修改系统时区: 可以使用命令 tzselect,修改时区.操作示例: [root@localhost ~]# ...
- 云服务器 ECS Linux 修改编码格式
https://help.aliyun.com/knowledge_detail/41424.html?spm=5176.7841174.2.19.Le8kvy 通常情况下,云服务器 ECS Linu ...
- 修改Linux内核参数提高Nginx服务器并发性能
当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...
- 查看和修改Linux服务器的时区和时间
一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...
- 云服务器 ECS Linux Ubuntu 主机修改主机名
云服务器 ECS Linux 主机修改主机名 修改云服务器 ECS Linux 主机名常见的有两种方式,本文对此进行概要说明. 临时生效修改 使用命令行修改 hostname 主机名(可自定义),重新 ...
- ansible批量修改linux服务器密码的playbook
从网上找到批量修改Linux服务器root密码的playbook. 使用方法: 1.输入要修改的inventory组 2.按需要,在playbook中输入要修改的IP.新密码,如下: - hosts: ...
- 修改Linux内核参数提高Nginx服务器在高的时候的性能
并发 Linux下高并发的Nginx服务器,当TCP TIME_WAIT套接字数量经常达到两.三万,服务器很容易被拖死.通过修改Linux内核参数,可以减少Nginx服务器的TIME_WAIT套接字数 ...
- 利用expect批量修改Linux服务器密码
一个执着于技术的公众号 背景 修改Linux系统密码,执行passwd即可更改密码.可如果有成千上百台服务器呢,通过ssh的方式逐一进行修改,对我们来说,工作量是非常大,且效率非常低下.因此采用批量修 ...
- 自己家里搭建NAS服务器有什么好方案?
转自:https://www.zhihu.com/question/21359049 作者:陈二发链接:https://www.zhihu.com/question/21359049/answer/6 ...
随机推荐
- 27.4K Star!这个LLM应用宝库让你秒变AI全栈高手,RAG和AI Agent一网打尽!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 想要快速入门LLM应用开发?想要了解最新的RAG和AI Agent技术?这个收获27.4K ...
- 从零开始学Flink:开启实时计算的魔法之旅
在凌晨三点的数据监控大屏前,某电商平台的技术负责人突然发现一个异常波动:支付成功率骤降15%.传统的数据仓库此时还在沉睡,而基于Flink搭建的实时风控系统早已捕捉到这个信号,自动触发预警机制.当运维 ...
- 【记录】Python3|将元组/列表/集合或字典解析成多个参数传入函数,以及定义可变参数函数
[说人话版] 将元组/列表/集合或字典直接作为多个函数参数传入,只需要添加*或**即可. 样例如下. 在Python中,将元组.列表.集合或字典作为多个函数参数传入是一种非常方便的技巧,可以帮助我们在 ...
- JS 原型链的终点
从对 js 原型和原型链查找的特性, 我们知道了两个最为重要的结论: 函数对象天生存在 prototype 属性, 它是一个对象, 而它的 constructor 属性指回 函数自身 构造函数的 pr ...
- 卷积神经网络CNN 初识
Network 之前将人工神经网络的 BP算法给详细推导了2遍, 算是对神经网络有了一个初步的认识, 当然, 重点还是算法的推导, 从数学的角度看, 就是多元复合函数求偏导, 应用链式法则 而已, 思 ...
- 探索 Rust:从基础语法到实用概念
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 应用间通信(一):详解Linux进程IPC
进程之间是独立的.隔离的,使得应用程序之间绝对不可以互相"侵犯"各自的领地. 但,应用程序之间有时是需要互相通信,相互写作,才能完成相关的功能,这就不得不由操作系统介入,实现一种通 ...
- Vue-lazyload实现图片懒加载
前端多半是和页面打交道,我们在进行页面的展示的时候,对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载,等到滚动到可视区域后再去加载.即需要使用到 ...
- SpringBoot3整合SpringSecurity6(五)自定义登陆页面
大家好,我是晓凡 写在前面 在前面的文章中,我们学习了SpringSecurity 登录认证流程,对其应该有个大概印象了. 忘记的小伙伴点击下面自己复习去~ 在前面的学习中,我们使用的都是Spring ...
- RBMQ案例三:发布/订阅模式
在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker).在本篇教程中,我们要做的跟之前完全不一样 -- 分发一个消息给多个消费者(consumers).这种模式被称为&quo ...