Собственно, написал правило udev которое будет запускать скрипт при появлении зашифрованной флешки:
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="crypto_LUKS", ENV{ID_BUS}=="usb" RUN+="/opt/scripts/luxmount.sh"
Вот содержание скрипта:
#!/bin/env bash
DEVICE="$(blkid | grep LUKS | cut -d : -f1)"
export DEVICE
BLOCK="$(echo "$DEVICE" | cut -d / -f3)"
export BLOCK
REALUSER="$(who | grep ":0" | head -n1 | awk '{print($1)}')"
if [ -n "$DEVICE" ]; then
cryptsetup -v luksOpen "$DEVICE" "$BLOCK"_crypt --key-file=/etc/luks-keys/disk_secret_key \
2>&1 > "/tmp/cryptmount.log"
mkdir -p "/media/$REALUSER/LUKS_USB"
mount /dev/mapper/"$BLOCK"_crypt "/media/$REALUSER/LUKS_USB" 2>&1 >> "/tmp/cryptmount.log"
else
exit 0
fi
При запуске скрипта в терминале он нормально отробатывает. Udev показывает что скрипт failed with exit code 32.
Конкретно mount /dev/mapper/«$BLOCK»_crypt «/media/$REALUSER/LUKS_USB» не выполняется. Не могу понять почему (для меня udev вообще штука крайне непонятная).
И чтоб два раза не писать, udev умеет сам передавать что он монтирует (sda1, sda2 …) что бы не искать грепом?