文章摘要
前言 虽然可以使用 fstab 来在开机启动时自动挂载和计算机连接的硬盘设备,但是在系统运行阶段,对于新接入的设备,往往没有他的设备信息,此时如何让 linux 像 windows 一样自动挂载接入设备的分区呢。 这里我使用的工具是 systemd 和 udisks ,以下是我的 linux 发行版简要信息: OS: Arch Linux x86_64 Kernel: 6.11.5-zen1-1-…
前言 虽然可以使用 fstab 来在开机启动时自动挂载和计算机连接的硬盘设备,但是在系统运行阶段,对于新接入的设备,往往没有他的设备信息,此时如何让 linux 像 windows 一样自动挂载接入设备的分区呢。 这里我使用的工具是 systemd 和 udisks ,以下是我的 linux 发行版简要信息: OS: Arch Linux x86_64 Kernel: 6.11.5-zen1-1-zen Shell: zsh 5.9 DE: Plasma 6.2.2 Memory: 8807MiB / 31570MiB 除开各个发行版安装软件包的差异,以下内容为通用解决方案 正文 udisk是作为一个服务进程运行的,并提供了 udisksctl(1) 命令行工具来与其交互,从而实现对系统存储设备的管理。 安装udisk2 首先安装 udisk2 pacman -S udisk2 添加polkit权限 安装完毕后,在使用这个工具之前,我们要先为他添加 polkit 权限,使得用户执行此命令时可以免密执行。 sudo touch /etc/polkit-1/rules.d/50-udiskie.rules sudo chmod 644 /etc/polkit-1/rules.d/50-udiskie.rules sudo gpasswd -a username storage # username 替换成自己的用户名 并为/etc/polkit-1/rules.d/50-udiskie.rules添加以下内容 polkit.addRule(function(action, subject) { var YES = polkit.Result.YES; var permission = { // required for udisks1: "org.freedesktop.udisks.filesystem-mount": YES, "org.freedesktop.udisks.luks-unlock": YES, "org.freedesktop.udisks.drive-eject": YES, "org.freedesktop.udisks.drive-detach": YES, // required for udisks2: "org.freedesktop.udisks2.filesystem-mount": YES, "org.freedesktop.udisks2.encrypted-unlock": YES, "org.freedesktop.udisks2.eject-media": YES, "org.freedesktop.udisks2.power-off-drive": YES, // required for udisks2 if using udiskie from another seat (e.g. systemd): "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, "org.freedesktop.udisks2.filesystem-unmount-others": YES, "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, "org.freedesktop.udisks2.encrypted-unlock-system": YES, "org.freedesktop.udisks2.eject-media-other-seat": YES, "org.freedesktop.udisks2.power-off-drive-other-seat": YES }; if (subject.isInGroup("storage")) { return permission action.id]; } }); 此时只要是在 storage 用户组内的用户在执行 udisksctl 时,都将可以使用 --no-user-interaction 参数来跳过输入密码的过程。 添加监听服务进程 udevadm monitor You may use udevadm monitor to monitor block events and mount drives when a new block device is created. Stale mount points are automatically removed by udisksd , such that no special action is required on deletion. —— udisks - ArchWiki udevadm monitor 指令实现了对block events的监听,我们可以利用这个指令来获取新接入设备的blkid等信息,然后调用udisksctl挂载分区,从而实现新接入设备的自动挂载。好在 archlinux wiki 已经提供了一个示范脚本来实现此功能 #!/bin/sh pathtoname() { udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}' } stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do if "$event" = add ]; then devname=$(pathtoname "$devpath") udisksctl mount --block-device "$devname" --no-user-interaction fi done 将他保存到 ~/.local/bin/start-udevadm-monitor 中(其他路径也可以,别忘了赋予可执行权限),我的家目录为 /home/styunlen ,请根据自己的用户名做更改 然后再创建一个 systemd 服务来在开机启动时自动运行这个脚本,这样我们就能持续监听硬盘接入事件,并自动挂载他啦~ 首先使用下列命令创建 service 文件,并将他的文件权限改为644 sudo touch /etc/systemd/system/udevadm-monitor.service sudo chmod 644 /etc/systemd/system/udevadm-monitor.service 然后输入以下内容 Unit] Description=udevadm-monitor Service] WorkingDirectory=/home/styunlen/.local/bin ExecStart=/home/styunlen/.local/bin/start-udevadm-monitor ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Restart=always RestartSec=3 Install] WantedBy=multi-user.target 最后输入以下命令启用他,就可以实现自动监听硬盘接入事件,并且自动挂载啦~ sudo systemctl enable --now udevadm-monitor.service 引用 udisks - ArchWiki [https://wiki.archlinux.org/title/Udisks] Permissions · coldfix/udiskie Wiki · GitHub [https://github.com/coldfix/udiskie/wiki/Permissions]前言
虽然可以使用fstab 来在开机启动时自动挂载和计算机连接的硬盘设备,但是在系统运行阶段,对于新接入的设备,往往没有他的设备信息,此时如何让linux 像 windows 一样自动挂载接入设备的分区呢。
这里我使用的工具是systemd和udisks,以下是我的linux发行版简要信息:
除开各个发行版安装软件包的差异,以下内容为通用解决方案
正文
udisk是作为一个服务进程运行的,并提供了 udisksctl(1) 命令行工具来与其交互,从而实现对系统存储设备的管理。
安装udisk2
首先安装udisk2
添加polkit权限
安装完毕后,在使用这个工具之前,我们要先为他添加polkit权限,使得用户执行此命令时可以免密执行。
并为/etc/polkit-1/rules.d/50-udiskie.rules添加以下内容
此时只要是在storage用户组内的用户在执行udisksctl时,都将可以使用--no-user-interaction参数来跳过输入密码的过程。
添加监听服务进程
udevadm monitor
You may use udevadm monitor to monitor block events and mount drives when a new block device is created. Stale mount points are automatically removed by udisksd, such that no special action is required on deletion.
udevadm monitor指令实现了对block events的监听,我们可以利用这个指令来获取新接入设备的blkid等信息,然后调用udisksctl挂载分区,从而实现新接入设备的自动挂载。好在archlinux wiki已经提供了一个示范脚本来实现此功能
将他保存到~/.local/bin/start-udevadm-monitor中(其他路径也可以,别忘了赋予可执行权限),我的家目录为/home/styunlen,请根据自己的用户名做更改
然后再创建一个systemd服务来在开机启动时自动运行这个脚本,这样我们就能持续监听硬盘接入事件,并自动挂载他啦~
首先使用下列命令创建service文件,并将他的文件权限改为644
然后输入以下内容
最后输入以下命令启用他,就可以实现自动监听硬盘接入事件,并且自动挂载啦~
引用
本文采用 CC BY-NC-SA 4.0 协议进行授权,如无注明均为原创,转载请注明出处。
标题:使用udisk来让Linux自动挂载USB硬盘和U盘作者:九仞之行链接:http://dev.styunlen.cn/archives/post-1696.html
