Случилось так, что я отказался от полноценных рабочих столов в пользу оконного менеджера fluxbox. Всё меня устраивает, кроме одного — автоматического монтирования флешек в оконном менеджере, естественно, не предусмотрено. Один мой приятель, на своём сайте разместил статью об автомонтировании флешек через правила демона udev. В этой заметке я напишу о том, как я немного расширил правила, приведённые в указной статье.
Всем Вам известно, что накопители в Linux монтируются в существующий каталог. И каждый, кто монтировал флешки вручную, знает, что перед монтированием нужно создать каталог, затем смонтировать, а после размонтирования — удалить.  Альтернативой может служить заранее созданная куча каталогов, но это засоряет файловую систему и, к тому же, не красиво, с эстетической точки зрения.
Для автоматизации указанных действий, мною был написан следующий скрипт на bash.

#!/bin/bash

# $1 - action: mount or umount
# $2 - device name
# $3 - device file

ACTION=$1
MOUNT_ACTION=mount
UMOUNT_ACTION=umount
DEVICE_NAME=$2
DEVICE_FILE=$3
MOUNT_DIR=/mnt/
MOUNT_CMD=mount
UMOUNT_CMD=umount
MOUNT_OPTS="-o rw,umask=0"
SCRIPT_NAME=devmount


function printUsage() {
echo Usage:
echo "$SCRIPT_NAME $MOUNT_ACTION <device name> <device file>"
echo or
echo "$SCRIPT_NAME $UMOUNT_ACTION <device name>"
}

# $1 - error message
function errorMessage() {
echo -e 'E[31m'<$SCRIPT_NAME> Error: $1
tput sgr0
}

# $1 - warning message
function warningMessage() {
echo -e 'E[33m'<$SCRIPT_NAME> Warning: $1
tput sgr0
}

# $1 - message
function logMessage() {
echo -e 'E[32m'<$SCRIPT_NAME>: $1
tput sgr0
}

# $1 - error message
function errorExit() {
errorMessage "$1"
echo
printUsage
echo
exit 1
}

# $1 - error message
function crashExit() {
errorMessage "$1"
echo
exit 2
}

# $1 - directory path
# returns 1 - true, 0 - false
function isDirectoryEmpty() {
DIR_CONTENT=`ls -A $1 3> /dev/null`
NOT_EMPTY=X$DIR_CONTENT
if [ "$NOT_EMPTY" == "X" ]; then
return 1
else
return 0
fi
}

# $1 - directory name
function deleteDirectory() {
rmdir $1
if [ ! 0 == $? ]; then
warningMessage "couldn't delete $1"
return 1
fi
return 0
}

function mountDevice() {
if [ -d $MOUNT_DIR$DEVICE_NAME ]; then
warningMessage "$MOUNT_DIR$DEVICE_NAME already exist"
isDirectoryEmpty $MOUNT_DIR$DEVICE_NAME
if [ $? == 0 ]; then
crashExit "$MOUNT_DIR$DEVICE_NAME is not empty"
fi
else
mkdir $MOUNT_DIR$DEVICE_NAME
if [ ! 0 == $? ]; then
crashExit "couldn't create $MOUNT_DIR$DEVICE_NAME"
fi
fi
$MOUNT_CMD $DEVICE_FILE $MOUNT_DIR$DEVICE_NAME $MOUNT_OPTS
if [ ! 0 == $? ]; then
deleteDirectory $MOUNT_DIR$DEVICE_NAME
crashExit "couldn't mount device"
else
logMessage "mount success"
fi
}

function umountDevice() {
$UMOUNT_CMD $MOUNT_DIR$DEVICE_NAME
if [ $? == 0 ]; then
logMessage "unmount success"
deleteDirectory $MOUNT_DIR$DEVICE_NAME
else
crashExit "unmount failure"
fi
}

case $ACTION in
$MOUNT_ACTION)
mountDevice
;;

$UMOUNT_ACTION)
umountDevice
;;

*)
errorExit "unknown parametr "$ACTION
;;
esac

Этот скрипт создаёт в каталоге /mnt каталог с переданным именем и монтирует в него указанное устройство. Если каталог существует, скрипт выдаст предупреждение, а если существующий каталог не пуст — ошибку.
Этот скрипт я и скормил udev`у, как сказано в статье.

SUBSYSTEM=="block", KERNEL=="sd[c-z][0-9]", ACTION=="add", RUN+="/usr/local/bin/devmount mount flash-%k /dev/%k"
SUBSYSTEM=="block", KERNEL=="sd[c-z][0-9]", ACTION=="remove", RUN+="/usr/local/bin/devmount umount flash-%k"

Теперь при вставке флешки, она у меня автоматически монтируется, а при вытаскивании — размонтируется. Кроме того, скрипт позволяет проводить эти операции вручную, что необходимо, если Вы не уверены в безопасности извлечения флешки в данный момент.