答案1
我刚刚尝试过这个,我也遇到了这个问题。
我不知道这是不是故意的或者是一种错误,不过这里有一个解决方法;
我找不到一种“干净的方式”来做事并在从 GNOME 会话注销时运行脚本,我认为没有工具可以做到这一点。
所以我认为下一个“最干净”的东西是使用/etc/gdm3/PostSession/Default
(每次以 GDM 启动的会话结束时它都会以 root 身份运行:优点是它适用于以 GDM 启动的每个会话,包括其他桌面环境,并且适用于每个用户,在您的情况下这两者都是理想的功能)。
我会很迂腐地让你使用其 ID 而不是其路径来卸载驱动器,这对于外部驱动器来说至关重要,因为其路径更容易发生变化。
首先确定驱动器的 ID:
lsblk -So VENDOR,MODEL,ID
% lsblk -So VENDOR,MODEL,ID
VENDOR MODEL ID
USB SanDi USB_SanDisk_3.2Gen1_0401c1c9c83d0b2a25b1128dbbb7c1ae9377813411422a8d5a8c9ce6373d2d71a2fb00000000000000000000887c6f7a00147c1881558107b42f0cf4-0:0
/etc/gdm3/PostSession/Default
然后像这样编辑:
#!/bin/sh
id='/dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_0401c1c9c83d0b2a25b1128dbbb7c1ae9377813411422a8d5a8c9ce6373d2d71a2fb00000000000000000000887c6f7a00147c1881558107b42f0cf4-0:0'
umount $(realpath "${id}")*
exit 0
id
用您的驱动器的 ID替换;
请注意,umount $(realpath "${id}")*
将卸载嵌套在磁盘实际路径(等)下的所有分区/dev/sda1
,/dev/sda2
我认为这也是您所需要的功能。
答案2
好吧,让我想起了一件事
请
/etc/systemd/logind.conf
更改线路
#KillUserProcesses=no
到
KillUserProcesses=yes
因此当用户注销时,所有进程都将被终止(会话范围)。
sudo systemctl restart systemd-logind.service
然后再试一次。