如何实现Ubuntu执行关机操作时自动重启,仅通过物理按键完成真正关机
如何实现Ubuntu执行关机操作时自动重启,仅通过物理按键完成真正关机
嘿,我明白你想要的效果——用shutdown命令或者GUI点关机时系统自动重启,只有按物理电源键才真正完成关机。之前你试过用关机触发的服务没成功,大概率是服务的配置优先级或者依赖关系没弄对,毕竟Ubuntu现在用systemd管理系统启停,流程有严格的顺序要求。我给你一个靠谱的方案,基于systemd来实现:
方法:创建高优先级systemd服务拦截关机指令
我们要做的是创建一个优先级极高的systemd服务,当系统收到关机请求时,直接触发重启操作,同时不影响物理电源按键的原生关机功能。
创建自定义服务文件
打开终端,用管理员权限创建一个systemd服务配置文件:sudo nano /etc/systemd/system/override-shutdown-to-reboot.service写入服务配置内容
将以下内容粘贴到文件中,每个配置项的作用我会在后面说明:[Unit] Description=Override shutdown to reboot DefaultDependencies=no Before=shutdown.target reboot.target halt.target poweroff.target Conflicts=reboot.target halt.target poweroff.target [Service] Type=oneshot ExecStart=/usr/bin/systemctl reboot TimeoutStartSec=0 [Install] WantedBy=shutdown.targetDefaultDependencies=no:关闭默认依赖,避免和系统自带的关机服务冲突Before=...:确保这个服务在所有关机、重启、停机目标之前执行,抢占优先级Conflicts=...:和其他启停目标冲突,保证触发关机时只会执行我们的重启逻辑ExecStart=/usr/bin/systemctl reboot:核心操作,执行重启命令WantedBy=shutdown.target:绑定到关机目标,只要系统触发关机就会启动这个服务
启用并生效服务
保存文件后,执行以下命令启用服务并让systemd重新加载配置:sudo systemctl enable override-shutdown-to-reboot.service sudo systemctl daemon-reload
测试效果
现在你可以测试两种场景:
- 终端执行
sudo shutdown now,系统应该会自动重启而不是关机 - 在GUI界面点击关机按钮,同样会触发重启
- 按物理电源按键,系统会正常执行关机(默认Ubuntu中物理电源键绑定的是
poweroff.target,不受我们这个服务影响)
如果之后想要恢复原行为,只需要禁用并删除这个服务即可:
sudo systemctl disable override-shutdown-to-reboot.service sudo rm /etc/systemd/system/override-shutdown-to-reboot.service sudo systemctl daemon-reload
备注:内容来源于stack exchange,提问作者Zaitam




