如果 pacman 正在运行,我可以禁用关机吗?

如果 pacman 正在运行,我可以禁用关机吗?

在我上次使用 arch linux 更新期间,pacman -Syu我关闭了笔记本电脑,因为我忘记了更新是在后台运行并安装软件包的。

之后我无法再启动 arch linux,并且不得不经历(对我来说)耗时的过程,即使用另一台笔记本电脑创建可启动 USB 并使用 chroot 重新运行pacman -Syu以修复我的 arch linux 安装。

我之前在运行系统更新时意外关闭笔记本电脑后也遇到过类似的问题,所以我想知道是否有一种方法可以在即将启动关闭过程时显示 pacman 正在运行的警告。

我使用常规 KDE Plasma“关闭”机制关闭计算机。

编辑

作为一个想法;我想我也许可以编写一个脚本,首先检查 pacman 是否正在运行,如所解释的这里,然后,如果 pacman 未运行,则调用显示的 kde shutdown 命令这里

我无法尝试,因为我目前无法访问我的 Linux 机器,但今晚我会尝试一下。

答案1

我找到了解决这个问题的系统范围的解决方案,防止任何类型的电源管理:我创建了两个 pacman 钩子,它们防止 systemd 关闭电源(请参阅https://askubuntu.com/a/858617)。

第一个是掩盖目标:

/etc/pacman.d/hooks/00-prevent-interruption-pre.hook

[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = *

[Action]
Description = Masking systemd targets to prevent interruption...
When = PreTransaction
Exec = /usr/bin/systemctl --runtime mask halt.target poweroff.target reboot.target kexec.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target sleep.target
Depends = systemd

第二个是在所有其他钩子运行后再次揭开它们:

/etc/pacman.d/hooks/99-prevent-interruption-post.hook

[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = *

[Action]
Description = Unmasking systemd targets to reenable power management...
When = PostTransaction
Exec = /usr/bin/systemctl --runtime unmask halt.target poweroff.target reboot.target kexec.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target sleep.target
Depends = systemd

这不会阻止您退出但将禁用任何关闭功能,直到pacman成功运行为止。因此,为了保持 pacman 运行,我建议您将其放入终端多路复用器(如tmux)中,以防止它在终端应用程序关闭时被中断。

相关内容