This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
After seeing lots of automatic mount/umount notifications during provisioning, we wondered if it would be possibile to temporarily disable them while we're working on the SD card.
It turns out that it's possible, and here's a convenient python context manager
to do it cleanly, based on /usr/lib/udisks2/udisks2-inhibit
, but adding the
possibility of inhibiting automounting only on one specific device:
@contextmanager
def pause_automounting(self, dev: Dict[str, Any]):
"""
Pause automounting on the device for the duration of this context
manager
"""
# See /usr/lib/udisks2/udisks2-inhibit
devpath = dev["path"]
rules_dir = "/run/udev/rules.d"
os.makedirs(rules_dir, exist_ok=True)
rule_file = os.path.join(rules_dir, "90-udisks-inhibit-" + devpath.replace("/", "_") + ".rules")
with open(rule_file, "wt") as fd:
print('SUBSYSTEM=="block", ENV{DEVNAME}=="' + devpath + '*", ENV{UDISKS_IGNORE}="1"', file=fd)
fd.flush()
os.fsync(fd.fileno())
run(["udevadm", "control", "--reload"])
run(["udevadm", "trigger", "--settle", "--subsystem-match=block"])
try:
yield
finally:
os.unlink(rule_file)
run(["udevadm", "control", "--reload"])
run(["udevadm", "trigger", "--settle", "--subsystem-match=block"])