#!/bin/sh MOUNT_OPTIONS_DEFAULT="ro,noexec" MOUNT_OPTIONS_VFAT="umask=0022" MOUNT_OPTIONS_EXT="" MOUNT_OPTIONS_NTFS="" MOUNT_OPTIONS_ISO9660="" VERBOSE=false # Source a configuration file that can override mount options if exists [ -f /etc/automount.conf ] && . /etc/automount.conf mount_device() { MOUNT_OPTIONS="" FSTYPE="$( udevadm info "${1}" "${2}" | awk -v FS== '/ID_FS_TYPE/ {print $2}' )" DEVNAME="$( udevadm info "${1}" "${2}" | awk -v FS== '/DEVNAME/ {print $2}' )" case $FSTYPE in vfat) MOUNT_OPTIONS="${MOUNT_OPTIONS_VFAT}" ;; ext[2-4]) MOUNT_OPTIONS="${MOUNT_OPTIONS_EXT}" ;; ntfs) MOUNT_OPTIONS="${MOUNT_OPTIONS_NTFS}" ;; iso9660) MOUNT_OPTIONS="${MOUNT_OPTIONS_ISO9660}" ;; "") if $VERBOSE; then echo "[INFO][${DEVNAME}] Not a partition with a filesystem!" fi return ;; *) echo "[WARNING][${DEVNAME}] The filesystem '${FSTYPE}' is not supported!" return ;; esac if [ -n "${MOUNT_OPTIONS_DEFAULT}" ]; then if [ -z "${MOUNT_OPTIONS}" ]; then MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT}" else MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT},${MOUNT_OPTIONS}" fi fi if $VERBOSE; then echo "[INFO][${DEVNAME}] Mounting a ${FSTYPE}'s filesystem with options: ${MOUNT_OPTIONS}" fi if command -v udisksctl > /dev/null 2>&1; then if [ -n "${MOUNT_OPTIONS}" ]; then MOUNT_OPTIONS="-o ${MOUNT_OPTIONS}" fi udisksctl mount -t "${FSTYPE}" -b "${DEVNAME}" ${MOUNT_OPTIONS} elif command -v udisks >/dev/null 2>&1; then if [ -n "${MOUNT_OPTIONS}" ]; then MOUNT_OPTIONS="--mount-options ${MOUNT_OPTIONS}" fi udisks --mount-fstype "${FSTYPE}" --mount "${DEVNAME}" ${MOUNT_OPTIONS} else echo "[ERROR] Unable to find binary for mounting ${DEVNAME}" >&2 return fi if [ "$?" -ne "0" ]; then echo "[ERROR] Failed to mount the device ${DEVNAME} of type ${FSTYPE} with options ${MOUNT_OPTIONS}" >&2 fi } # At startup, remove empty directories that may exists rmdir /media/* > /dev/null 2>&1 # Mount already plugged devices for DEVICE in $( lsblk -dn | cut -d' ' -f1 ); do REMOVABLE=$( cat "/sys/block/${DEVICE}/removable" ) if [ "${REMOVABLE}" -eq "1" ]; then for PART in "/dev/${DEVICE}"*; do mount_device -n "${PART}" done fi done # Wait for plug events and mount devices stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ EVENT DEVPATH _ do if [ "${EVENT}" = "add" ]; then mount_device -p "/sys/${DEVPATH}" fi done