前言

事情是这样的

今天想用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. symfony快速构建restfull api--api-platform初体验(快速上手笔记)

    初识api-platform: 都0202年了,整天还在用php一遍又一遍的写crud api吗?还在为构建restfull风格api而烦恼吗?那么,symfony的衍生框架api-platform你 ...

  2. 漏洞预警 | Apache NiFi信息泄露漏洞

    0x00 漏洞编号 CVE-2024-56512 0x01 危险等级 中危 0x02 漏洞概述 Apache NiFi是一个强大的.易于使用的数据集成平台,旨在自动化和管理数据流,尤其是在大数据环境中 ...

  3. SpringBoot3整合SpringSecurity6(三)基于数据库的用户认证

    大家好,我是晓凡. 写在前面 上一篇文章中,我们了解了SpringSecurity怎么基于内存进行用户认证.但这还远远不够,在实际开发中. 用户往往都存在于数据库,所以从这篇文章开始,我们就要开始学习 ...

  4. ASP.NET Core Minimal API之optional route parameter with default value and optional route parameter

    public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var app = ...

  5. c语言笔记(翁凯男神

    哼,要记得好好学习去泡帅哥吖 一.快速入门 %p 输出地址 #include <stdio.h> void f(int *p); int main(){ int i = 1; printf ...

  6. qt动画类学习

    Qt动画类 QPropertyAnimation 显示动画 QPropertyAnimation *animation = new QPropertyAnimation(window(), " ...

  7. Streamlit入门:10分钟搭建数据可视化界面

    一.Streamlit简介 Streamlit是一个用Python构建数据应用的开源框架,它能让我们快速创建漂亮的数据可视化界面.本文将通过一个简单的示例,展示如何使用Streamlit构建数据可视化 ...

  8. RBMQ案例四:路由模式

    使仅订阅消息的子集成为可能.例如,我们将能够仅将关键错误消息定向到日志文件(以节省磁盘空间),同时仍然能够在控制台上打印所有日志消息.   通过路由来匹配对应的消息 一.消息发布端 #!/usr/bi ...

  9. 前端EXCEL插件智表ZCELL数据源功能详解

    一.数据源功能介绍前端EXCEL插件智表ZCELL提供了强大的数据源管理功能,使开发者能够灵活地在电子表格中集成和管理结构化数据.数据源功能主要分为两种类型: 卡片式数据源:适合展示和编辑单个数据记录 ...

  10. Java中判断某一字符串是否包含数字、字母和中文

         在Java中判断某一字符串是否为纯英文.纯数字.英文和数字的组合等时,通常使用正则str.matches匹配,告诉这个字符串是否与给定的正则表达式匹配.  各种字符的unicode编码的范围 ...