From f868d18dc1a18612cec24a1dae5d658609d88714 Mon Sep 17 00:00:00 2001 From: TomasM Date: Sun, 24 Dec 2017 03:27:37 -0500 Subject: [PATCH] auto mount plugged disks in slax --- .../03-desktop/rootcopy/root/.fluxbox/startup | 9 +- .../etc/udev/rules.d/fstab-update.rules | 2 + .../debian/rootcopy/sbin/gtk-bookmarks-update | 10 + Slax/debian/rootcopy/sbin/udev-fstab-update | 185 ++++++++++++++++++ 4 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 Slax/debian/rootcopy/etc/udev/rules.d/fstab-update.rules create mode 100755 Slax/debian/rootcopy/sbin/gtk-bookmarks-update create mode 100755 Slax/debian/rootcopy/sbin/udev-fstab-update diff --git a/Slax/debian/modules/03-desktop/rootcopy/root/.fluxbox/startup b/Slax/debian/modules/03-desktop/rootcopy/root/.fluxbox/startup index e80ddbe..f02ff3c 100644 --- a/Slax/debian/modules/03-desktop/rootcopy/root/.fluxbox/startup +++ b/Slax/debian/modules/03-desktop/rootcopy/root/.fluxbox/startup @@ -13,13 +13,8 @@ xrdb -merge ~/.Xresources # set keyboard layout fbsetkb $(cat ~/.fluxbox/kblayout) -# setup bookmarks -cat ~/.gtk-bookmarks | fgrep -v ///media/ | fgrep -v "file:/// /" | egrep -v '^$' > ~/.gtk-bookmarks.tmp 2>/dev/null -ls -1 /media | while read LINE; do - echo "file:///media/$LINE $LINE" >> ~/.gtk-bookmarks.tmp -done -echo "file:/// /" >> ~/.gtk-bookmarks.tmp # add root -mv -f ~/.gtk-bookmarks.tmp ~/.gtk-bookmarks +# setup bookmarks for file manager +gtk-bookmarks-update # Share common directories with guest user. This is necessary # because some apps like chromium must be running under guest diff --git a/Slax/debian/rootcopy/etc/udev/rules.d/fstab-update.rules b/Slax/debian/rootcopy/etc/udev/rules.d/fstab-update.rules new file mode 100644 index 0000000..5b62877 --- /dev/null +++ b/Slax/debian/rootcopy/etc/udev/rules.d/fstab-update.rules @@ -0,0 +1,2 @@ +# we don't care about loop* and ram* devices +KERNEL=="[!lr]*", SUBSYSTEM=="block", RUN+="/sbin/udev-fstab-update %r/%k" diff --git a/Slax/debian/rootcopy/sbin/gtk-bookmarks-update b/Slax/debian/rootcopy/sbin/gtk-bookmarks-update new file mode 100755 index 0000000..24f605c --- /dev/null +++ b/Slax/debian/rootcopy/sbin/gtk-bookmarks-update @@ -0,0 +1,10 @@ +#!/bin/bash + +cat ~/.gtk-bookmarks | fgrep -v ///media/ | fgrep -v "file:/// /" | egrep -v '^$' > ~/.gtk-bookmarks.tmp 2>/dev/null +ls -1 /media | while read LINE; do + echo "file:///media/$LINE $LINE" >> ~/.gtk-bookmarks.tmp +done + +echo "file:/// /" >> ~/.gtk-bookmarks.tmp # add root at the end + +mv -f ~/.gtk-bookmarks.tmp ~/.gtk-bookmarks diff --git a/Slax/debian/rootcopy/sbin/udev-fstab-update b/Slax/debian/rootcopy/sbin/udev-fstab-update new file mode 100755 index 0000000..3448b6c --- /dev/null +++ b/Slax/debian/rootcopy/sbin/udev-fstab-update @@ -0,0 +1,185 @@ +#!/bin/bash +# Recreate fstab entries in /etc/fstab and make /media directories +# This script is called by udev rules, see /etc/udev/rules.d/ +# +# Author: Tomas M + +# Variables available in udev environment: +# $ACTION (eg: add, remove) +# $DEVNAME (full device node name including path) +# $DEVTYPE (eg: disk) +# $ID_FS_TYPE (eg: ext3) +# $MAJOR and $MINOR numbers +# $SUBSYSTEM (eg: block) + +PATH=$PATH:/usr/bin:/usr/sbin:/bin:/sbin +FSTAB=/etc/fstab +FSTABFLAG="# AutoUpdate" + +# a logging function +log() +{ + mkdir -p /dev/.udev + echo "process ID $$:" "$@" >>/dev/.udev/udev-fstab-update.log +} + +# Make sure the part of a script after 'mutex_lock' call is atomic, +# that means the 'locked' part of the script can never be execuetd +# from several processes at the same time, in parallel. +# Every script waits until it gathers the lock. +# The lock directory is saved in /dev instead of /tmp, because /tmp may be +# readonly at the time when the lock is needed (eg. when udev is starting) +# $1 = name of the lock +# +mutex_lock() +{ + while ! mkdir "/dev/ll-mutex-lock-$1" 2>/dev/null; do + usleep 100000; + done +} + + +# Unlock the lock so another waiting process can reusse it and continue +# $1 = name of the lock +# +mutex_unlock() +{ + rmdir "/dev/ll-mutex-lock-$1" 2>/dev/null +} + + +# Get device tag. +# $1 = device +# $2 = tag name, such as TYPE, LABEL, UUID, etc +# +device_tag() +{ + blkid -s $2 "$1" | sed -r "s/^[^=]+=//" | tr -d '"' +} + + +# Make sure to mount FAT12/16/32 using vfat +# in order to support long filenames +# $1 = device +# +device_bestfs() +{ + local FS + + FS="$(device_tag "$1" TYPE | tr [A-Z] [a-z])" + if [ "$FS" = "msdos" -o "$FS" = "fat" -o "$FS" = "vfat" ]; then + FS="vfat" + elif [ "$FS" = "ntfs" ]; then + FS="ntfs-3g" + fi + + echo "$FS" +} + + +# Filesystem options for initial mount +# $1.. = filesystem +# +fs_options() +{ + debug_log "fs_options" "$*" + + echo -n "defaults" + + if [ "$1" = "vfat" ]; then + echo ",check=s,shortname=mixed,iocharset=utf8" + fi +} + + +# Find out if device is in fstab already +# $1 = fstab file +# $2 = device name +dev_is_in_fstab() +{ + cat "$1" | sed -r "s/#.*//" | egrep -q "^[[:space:]]*$2[[:space:]]" +} + + +# update given line in fstab, add new values only if the device is not found +# $1 = fstab file to parse +# $2 = device name +# $3 = mountpoint +# $4 = filesystem +# $5 = mount options +# +fstab_add_line() +{ + local DIR + + if [ "$4" != "swap" ]; then DIR="$3"; else DIR="none"; fi + if ! dev_is_in_fstab "$1" "$2"; then + echo "$2" "$DIR" "$4" "$5" 0 0 "$FSTABFLAG" >>$1 + fi +} + +# tell us if the given filesystem is supported +# (eg. it's in /proc/filesystems or we know it) +# $1 = filesystem name +# +is_supported_filesystem() +{ + egrep -q "[[:space:]]$1\$" /proc/filesystems +} + + +log starting udev-fstab-update with parameters $ACTION $DEVNAME + +mutex_lock udev-fstab-update + + +if [ "$ACTION" = "add" -o "$ACTION" = "change" ]; then + if ! dev_is_in_fstab $FSTAB $DEVNAME; then + + # find some information about the device + FS=$(device_bestfs $DEVNAME) + OPT=$(fs_options $FS fstab) + BAS=$(basename "$DEVNAME") + MNT=/media/$BAS + log "Found the following: FS=$FS OPT=$OPT MNT=$MNT" + + # If udev detected floppy, add it here. Thanks Quax :) + if [ "$(echo "$DEVNAME" | grep /fd)" != "" ]; then + mkdir -p /media/floppy + fstab_add_line $FSTAB $DEVNAME /media/floppy auto rw,noauto,user,sync + fi + + if [ "$FS" = "swap" ]; then + fstab_add_line $FSTAB $DEVNAME $MNT $FS $OPT + fi + + # If the partition has a valid filesystem, add it to fstab. + # This probably won't handle HotAdded CDROMs with no media, + # but that shouldn't be any problem as those devices would + # be of no use when empty, and it will notify us when a + # new media is inserted. + if is_supported_filesystem "$FS"; then + log Calling fstab_add_line $FSTAB $DEVNAME $MNT $FS $OPT + fstab_add_line $FSTAB $DEVNAME $MNT $FS $OPT + mkdir -p "$MNT" + gtk-bookmarks-update + mutex_unlock udev-fstab-update + + if [ -e /usr/bin/pcmanfm ]; then + su - root -c "export DISPLAY=:0; mount "$MNT"; pcmanfm $MNT >/dev/null 2>/dev/null" + #umount "$MNT" + #rmdir "$MNT" + #gtk-bookmarks-update + fi + exit + fi + else + log device $DEVNAME already in fstab, skipped + fi +fi + +if [ "$ACTION" = "remove" ]; then + sed -i -r "\\;^[[:space:]]*$DEVNAME[[:space:]].*;d" $FSTAB +fi + +mutex_unlock udev-fstab-update