前言

事情是这样的

今天想用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

扩展

自定义脚本

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

  1. 设置 HandlePowerKey=ignore,避免 systemd 接管。
  2. 使用 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 空闲会话保持多久之后自动终止(默认不终止)。

参考资料

也可以在系统上直接用 man 命令看

man logind.conf

小心误关了NAS服务器!修改Linux的电源键功能的更多相关文章

  1. 修改ubuntu按电源键触发效果

    GUI内终端执行如下指令,或者加入开机启动脚本内 gsettings set org.gnome.settings-daemon.plugins.power button-power shutdown ...

  2. 云服务器 ECS Linux 服务器修改时区的两种方式

    在云服务器 ECS Linux 系统中,以 Centos6.5 为例,可以通过如下两种方式,修改系统时区: 可以使用命令 tzselect,修改时区.操作示例: [root@localhost ~]# ...

  3. 云服务器 ECS Linux 修改编码格式

    https://help.aliyun.com/knowledge_detail/41424.html?spm=5176.7841174.2.19.Le8kvy 通常情况下,云服务器 ECS Linu ...

  4. 修改Linux内核参数提高Nginx服务器并发性能

    当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...

  5. 查看和修改Linux服务器的时区和时间

    一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...

  6. 云服务器 ECS Linux Ubuntu 主机修改主机名

    云服务器 ECS Linux 主机修改主机名 修改云服务器 ECS Linux 主机名常见的有两种方式,本文对此进行概要说明. 临时生效修改 使用命令行修改 hostname 主机名(可自定义),重新 ...

  7. ansible批量修改linux服务器密码的playbook

    从网上找到批量修改Linux服务器root密码的playbook. 使用方法: 1.输入要修改的inventory组 2.按需要,在playbook中输入要修改的IP.新密码,如下: - hosts: ...

  8. 修改Linux内核参数提高Nginx服务器在高的时候的性能

    并发 Linux下高并发的Nginx服务器,当TCP TIME_WAIT套接字数量经常达到两.三万,服务器很容易被拖死.通过修改Linux内核参数,可以减少Nginx服务器的TIME_WAIT套接字数 ...

  9. 利用expect批量修改Linux服务器密码

    一个执着于技术的公众号 背景 修改Linux系统密码,执行passwd即可更改密码.可如果有成千上百台服务器呢,通过ssh的方式逐一进行修改,对我们来说,工作量是非常大,且效率非常低下.因此采用批量修 ...

  10. 自己家里搭建NAS服务器有什么好方案?

    转自:https://www.zhihu.com/question/21359049 作者:陈二发链接:https://www.zhihu.com/question/21359049/answer/6 ...

随机推荐

  1. 27.4K Star!这个LLM应用宝库让你秒变AI全栈高手,RAG和AI Agent一网打尽!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 想要快速入门LLM应用开发?想要了解最新的RAG和AI Agent技术?这个收获27.4K ...

  2. 从零开始学Flink:开启实时计算的魔法之旅

    在凌晨三点的数据监控大屏前,某电商平台的技术负责人突然发现一个异常波动:支付成功率骤降15%.传统的数据仓库此时还在沉睡,而基于Flink搭建的实时风控系统早已捕捉到这个信号,自动触发预警机制.当运维 ...

  3. 【记录】Python3|将元组/列表/集合或字典解析成多个参数传入函数,以及定义可变参数函数

    [说人话版] 将元组/列表/集合或字典直接作为多个函数参数传入,只需要添加*或**即可. 样例如下. 在Python中,将元组.列表.集合或字典作为多个函数参数传入是一种非常方便的技巧,可以帮助我们在 ...

  4. JS 原型链的终点

    从对 js 原型和原型链查找的特性, 我们知道了两个最为重要的结论: 函数对象天生存在 prototype 属性, 它是一个对象, 而它的 constructor 属性指回 函数自身 构造函数的 pr ...

  5. 卷积神经网络CNN 初识

    Network 之前将人工神经网络的 BP算法给详细推导了2遍, 算是对神经网络有了一个初步的认识, 当然, 重点还是算法的推导, 从数学的角度看, 就是多元复合函数求偏导, 应用链式法则 而已, 思 ...

  6. 探索 Rust:从基础语法到实用概念

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  7. 应用间通信(一):详解Linux进程IPC

    进程之间是独立的.隔离的,使得应用程序之间绝对不可以互相"侵犯"各自的领地. 但,应用程序之间有时是需要互相通信,相互写作,才能完成相关的功能,这就不得不由操作系统介入,实现一种通 ...

  8. Vue-lazyload实现图片懒加载

    前端多半是和页面打交道,我们在进行页面的展示的时候,对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载,等到滚动到可视区域后再去加载.即需要使用到 ...

  9. SpringBoot3整合SpringSecurity6(五)自定义登陆页面

    大家好,我是晓凡 写在前面 在前面的文章中,我们学习了SpringSecurity 登录认证流程,对其应该有个大概印象了. 忘记的小伙伴点击下面自己复习去~ 在前面的学习中,我们使用的都是Spring ...

  10. RBMQ案例三:发布/订阅模式

    在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker).在本篇教程中,我们要做的跟之前完全不一样 -- 分发一个消息给多个消费者(consumers).这种模式被称为&quo ...