You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现Ubuntu执行关机操作时自动重启,仅通过物理按键完成真正关机

如何实现Ubuntu执行关机操作时自动重启,仅通过物理按键完成真正关机

嘿,我明白你想要的效果——用shutdown命令或者GUI点关机时系统自动重启,只有按物理电源键才真正完成关机。之前你试过用关机触发的服务没成功,大概率是服务的配置优先级或者依赖关系没弄对,毕竟Ubuntu现在用systemd管理系统启停,流程有严格的顺序要求。我给你一个靠谱的方案,基于systemd来实现:

方法:创建高优先级systemd服务拦截关机指令

我们要做的是创建一个优先级极高的systemd服务,当系统收到关机请求时,直接触发重启操作,同时不影响物理电源按键的原生关机功能。

  1. 创建自定义服务文件
    打开终端,用管理员权限创建一个systemd服务配置文件:

    sudo nano /etc/systemd/system/override-shutdown-to-reboot.service
    
  2. 写入服务配置内容
    将以下内容粘贴到文件中,每个配置项的作用我会在后面说明:

    [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.target
    
    • DefaultDependencies=no:关闭默认依赖,避免和系统自带的关机服务冲突
    • Before=...:确保这个服务在所有关机、重启、停机目标之前执行,抢占优先级
    • Conflicts=...:和其他启停目标冲突,保证触发关机时只会执行我们的重启逻辑
    • ExecStart=/usr/bin/systemctl reboot:核心操作,执行重启命令
    • WantedBy=shutdown.target:绑定到关机目标,只要系统触发关机就会启动这个服务
  3. 启用并生效服务
    保存文件后,执行以下命令启用服务并让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

火山引擎 最新活动