操作概述你是否经常陷入这样的境地:打算晚上早点睡觉,无奈总是不小心睡过头了。你需要一种方法来强制你在时间到了时关机并进入睡眠状态,你是怎么做到的?Kgotobed是一个非常变态的内核模块。它会强制Linux在特定时间关闭,您对此无能为力(即使您是root用户)。概念和术语内核模块允许在运行时将代码动态插入和删除到Linux内核中。这些模块是具有独立功能的程序,可以独立编译但不能独立运行。模块在运行时作为内核的一部分在内核空间中运行。实际操作场景一:使用Kgotobed强制关机难点★★★demo发行版archlinux涉及archlinux上安装的gotobed命令。在archlinux上安装kgotobed,首先需要安装dkms和linux-headers这两个包:sudopacman-Sdkmslinux-headers--noconfirm然后去github克隆它的源码:gitclonehttps://github.com/nikital/kgotobed.git最后我们手动编译源码:cdkgotobed/sudomakeinstallmakeinstall命令会完成以下三件事:通过DKMS注册kgotobed.ko,安装gotobed命令到/usr/local/bin,注册,在systemd中启用并运行kgotobed.service,直接运行gotobed可以看到设置的强制关机时间:[vagrant@archlinuxkgotobed]$gotobed22:00当前就寝时间是2018-04-1301:00:00Settingbedtime到2018-04-1222:00:00Bedtime会在10小时32分钟后但是你不能再设置时间...[vagrant@archlinuxkgotobed]$gotobed2:00Currentbedtimeis2018-04-1301:00:00Error:Attemptingtoexpendbedtime,itdoesn'tworkonlikethis...要调整默认时间,需要修改/etc/systemd/系统/kgotobed.service。原来的kgotobed.service内容如下:[Unit]Description=kgotobed:PoweroffatbedtimeAfter=dkms.service[Service]Type=oneshotExecStartPre=/sbin/modprobekgotobedEnvironment=TIME=01:00ExecStart=/usr/local/bin/gotobed-f${TIME}[Install]WantedBy=multi-user.target我们把TIME=01:00改为TIME=02:00,然后重启系统。再次执行gotobed可以看到时间修改了:[vagrant@archlinux~]$gotobed当前就寝时间是2018-04-1302:00:00删除kgotobed逃避强制关机的命运,差不多唯一的方法是卸载kgotobed。我们可以在源码目录执行makeuninstall来卸载:[vagrant@archlinux~]$cdkgotobed/[vagrant@archlinuxkgotobed]$sudomakeuninstalldkmsremovekgotobed/1.0--all--------UninstallBeginning-------模块:kgotobed版本:1.0内核:4.15.15-1-ARCH(x86_64)-----------------------------------状态:卸载前,此模块版本在此内核上处于活动状态。kgotobed.ko:-卸载-删除自:/usr/lib/modules/4.15.15-1-ARCH/extra//-原始模块-在此内核上未找到此模块的原始模块。-使用dkms安装命令重新安装任何以前的模块版本。depmod.........DKMS:卸载完成。------------------------------删除模块版本:1.0完全从DKMS树中。------------------------------Done.rm-f/usr/local/bin/gotobedrm-f/etc/systemd/system/kgotobed.servicesystemctldaemon-reload[vagrant@archlinuxkgotobed]$小练习请根据需要更改强制关机时间。
