gpt4 book ai didi

linux - 通过以编程方式关闭打开的应用程序来强制卸载 USB 驱动器

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:33 27 4
gpt4 key购买 nike

当我从笔记本电脑上拔下交流适配器时,我希望所有 USB 驱动器自动卸载。如果打开的应用程序阻塞了设备,则应将其杀死。一旦所有东西都被杀死并卸载,就会发出信号音来表明现在可以安全地拔掉它了。

用例是快速抓取并使用您的笔记本电脑,而无需摸索用户界面来断开所有驱动器的连接,但避免不干净的卸载。

任何有关如何开始的提示都很棒,谢谢!

回答

For a full copy&paste script see my answer below.

<小时/>

如果您的 USB 设备安装到/mount/media,请执行以下操作:

kill -9 $(lsof -t $(mount | grep "/mount/media" | cut -d " " -f 1)) # Exit processes blocking umount cleanly
kill $(lsof -t $(mount | grep "/mount/media" | cut -d " " -f 1)) # Force kill remaining open processes
umount $(mount | grep "/mount/media" | cut -d " " -f 1) # Unmount USB drives

请小心这一点,因为如果您没有打开阻止应用程序 lsof将返回所有pids你会kill您正在运行的操作系统。请参阅下面的复制和粘贴脚本,了解处理这种情况的工作实现。

然后,每当拔掉交流适配器时,通过将此行添加到 /etc/udev/rules.d 来调用此脚本

SUBSYSTEM=="power_supply", ACTION=="change", ATTR{online}=="0" ,     RUN+="/path/to/script/shown/above"

下面 Nuetrino 的答案展示了如何检测交流电源拔出事件,这个答案: How do I find out which process is preventing a umount?显示如何列出并终止阻止设备卸载的所有进程(我使用 lsof 比使用 fusionr -c 更成功,后者有时没有列出任何进程,即使 umount 仍然被阻止)

详细信息

使用udevadm monitor记录事件,例如

KERNEL[20154.545075] change   /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP0 (power_supply)

然后使用udevadm info -a -p通过事件获取属性

udevadm info -a -p /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP0
looking at device '/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP0':
KERNEL=="ADP0"
SUBSYSTEM=="power_supply"
DRIVER==""
ATTR{online}=="0"
ATTR{type}=="Mains"

现在您可以使用您喜欢的属性设置 udev 规则,如下所示。

最佳答案

您可以定义 udev 规则来执行此操作。

只需将您的规则放入 /etc/udev/rules.d

这是我的一个示例,当我移除交流适配器时,我用它来控制亮度。

SUBSYSTEM=="power_supply", ACTION=="change", ATTR{online}=="0" , RUN+="/usr/local/bin/bright_unplug"
SUBSYSTEM=="power_supply", ACTION=="change", ATTR{online}=="1" , RUN+="/usr/local/bin/bright_replug

当我收到内核 uvent 时,我运行自定义脚本“bright_replug”和“bright_unplug”。

您可以使用udevadm监视器

monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent

您可以使用udevadm info来匹配更多属性

关于linux - 通过以编程方式关闭打开的应用程序来强制卸载 USB 驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com