树莓派使用Udisks2自动挂载U盘

参考链接:Udisks (简体中文) - ArchWiki (archlinux.org)

起因:项目中用到了树莓派,设置成不启动桌面,直接启动自己的app开机自启后发现U盘不自动挂载了。

提醒:由于linux改动频繁,也许你看到这篇文章的时候,本文方法已经不适用。祝好运!

本文对应的树莓派信息:

1
2
pi@raspberrypi:~ $ cat /proc/version
Linux version 5.10.103-v7l+ (dom@buildbot) (arm-linux-gnueabihf-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1529 SMP Tue Mar 8 12:24:00 GMT 2022

一、安装udevil

1
sudo apt install udevil

二、配置u盘挂载到/media

修改’/etc/udev/rules.d/99-udisks2.rules’并进行编辑

1
sudo nano /etc/udev/rules.d/99-udisks2.rules
/etc/udev/rules.d/99-udisks2.rules
1
2
3
4
5
# UDISKS_FILESYSTEM_SHARED
# ==1: mount filesystem to a shared directory (/media/VolumeName)
# ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName)
# See udisks(8)
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"

三、创建脚本 automount.sh

automount.sh
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

pathtoname() {
udevadm info -p "/sys/$1" | awk -v FS== '/DEVNAME/ {print $2}'
}

while read -r _ _ event devpath _; do
if [[ $event == add ]]; then
devname=$(pathtoname "$devpath")
udisksctl mount --block-device "$devname" --no-user-interaction
fi
done < <(stdbuf -o L udevadm monitor --udev -s block)

四、设置脚本自动执行

创建automount.service

1
sudo nano /lib/systemd/system/automount.service

编辑内容

/lib/systemd/system/automount.service
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=auto mount usb storange
After=network.target remote-fs.target nss-lookup.target

[Service]
ExecStart=/home/pi/automount.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

启动服务

1
sudo systemctl enable automount.service