previously on this list Hugo Pompougnac contributed: > As a > student, I'm discovering OpenBSD. I'm trying to automount USB keys with > hotplug, > but it's quite difficult. That's why I ask to you.
Hi, This mounts FFS, ext2fs, NTFS, MSDOS but not cd at the moment and falls back to ro mode giving a message saying so on a single user X11 session with places to add logging via logger. You can put /etc/hotplug/attach-user in /etc/hotplug/attach and it should work (if not strip out the sudo usage) or use the various files to only run the mounting as root via sudo. The one which runs via sudo requires attach, attach-user, sudoers.include. Both should have logging and comments added but I haven't the time right now but it should be easy enough to follow. Let me know if you have any issues. If you have problems with it inlined I'll attach them and send them privately. Just let me know. ntfs-3g is set to remove_hiberfile. If you dual boot you may want to change that. _______________________________________________________________________ /etc/hotplug/attach _______________________________________________________________________ #!/bin/sh #exec >> /tmp/logfile 2>&1 #set -x /usr/bin/su _automount -m -c "/usr/local/mybin/attach-oesys $1 $2" _______________________________________________________________________ /usr/local/mybin/attach-user - put where you like just edit above and must executable by _automount _______________________________________________________________________ #!/bin/sh # Author: Kevin Chadwick # License: BSD #________________________ # # CONFIG #________________________ #exec >> /tmp/logfile 2>&1 #set -x MOUNTLOCATION="/mnt/usb" #Maybe useful to grab a username running a single xsession #USER=$(/usr/bin/w | /usr/bin/grep xinit | /usr/bin/cut -d " " -f 1) USER="username" GROUP="mntaccess" #________________________ USERID=$(/usr/bin/id -u "$USER") GROUPID=$(/usr/bin/id -g "$GROUP") DEVCLASS=$1 DEVNAME=$2 echo "$DEVCLASS" > /tmp/devclass FREEPOINT=0 case $DEVCLASS in 2) if [ -f /usr/local/bin/gxmessage ]; then XMESSAGE="/usr/local/bin/gxmessage -title 'Automount Info' -name 'Automount Info'" else XMESSAGE='/usr/X11R6/bin/xmessage' fi getfreepoint() { until ! /sbin/mount | /usr/bin/grep -q "$MOUNTLOCATION""$FREEPOINT" do let FREEPOINT=FREEPOINT+1 done } #IFS=" ";export IFS /usr/bin/sudo /sbin/disklabel $DEVNAME | /usr/bin/grep "^ " | while read PARTLETTER pad pad PARTTYPE do getfreepoint PARTLETTER=$(echo "$PARTLETTER" | /usr/bin/cut -d ":" -f 1) PARTTYPE=$(echo "$PARTTYPE" | /usr/bin/cut -d " " -f 1) case $PARTTYPE in 4.2BSD) if /usr/bin/sudo /sbin/mount -o nodev,nosuid,noexec,softdep /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" then echo "" else /usr/bin/sudo /sbin/mount -o ro,nodev,nosuid,noexec /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" && /usr/bin/sudo /usr/bin/su "$USER" -c "/usr/bin/env DISPLAY=:0 $XMESSAGE -file /usr/local/mybin/romessage.txt &" fi ;; ext2fs) if /usr/bin/sudo /sbin/mount_ext2fs -o nodev,nosuid,noexec /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" then echo "" else /usr/bin/sudo /sbin/mount_ext2fs -o ro,nodev,nosuid,noexec /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" && /usr/bin/sudo /usr/bin/su "$USER" -c "/usr/bin/env DISPLAY=:0 $XMESSAGE -file /usr/local/mybin/romessage.txt &" fi ;; NTFS) if /usr/bin/sudo /usr/local/bin/ntfs-3g -o uid="$USERID",gid="$GROUPID",umask=007,norecover,remove_hiberfile,noatime,show_sys_files,window_names /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" then echo "" else /usr/bin/sudo /sbin/mount_ntfs -m 770 -u "$USER" -g "$GROUP" -o nodev,nosuid,noexec,ro /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" && /usr/bin/sudo /usr/bin/su "$USER" -c "/usr/bin/env DISPLAY=:0 $XMESSAGE -file /usr/local/mybin/romessage.txt &" fi ;; MSDOS) if /usr/bin/sudo /sbin/mount_msdos -m 770 -o nodev,nosuid,noexec -u "$USER" -g "$GROUP" /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" then echo "" else /usr/bin/sudo /sbin/mount_msdos -m 770 -o ro,nodev,nosuid,noexec -u "$USER" -g "$USER" /dev/"$DEVNAME""$PARTLETTER" "$MOUNTLOCATION""$FREEPOINT" && /usr/bin/sudo /usr/bin/su "$USER" -c "/usr/bin/env DISPLAY=:0 $XMESSAGE -file /usr/local/mybin/romessage.txt &" fi ;; *) echo "" ;; esac done ;; esac _______________________________________________________________________ Add to sudoers or a file that is included within sudoers _______________________________________________________________________ Defaults:_automount !requiretty _automount ALL=NOPASSWD: NOEXEC: /sbin/mount -o nodev\,nosuid\,noexec\,softdep /dev/sd[0-9][a-z] /mnt/usb[0-9], /sbin/mount -o ro\,nodev\,noexec /dev/sd[0-9][a-z] /mnt/usb[0-9], /sbin/mount_ext2fs -o nodev\,nosuid\,noexec /dev/sd[0-9][a-z] /mnt/usb[0-9], /sbin/mount_ext2fs -o ro\,nodev\,nosuid\,noexec /dev/sd[0-9][a-z] /mnt/usb[0-9], /usr/local/bin/ntfs-3g -o uid=3101\,gid=1000\,umask=007\,norecover\,remove_hiberfile\,noatime\,show_sys_files\,window_names /dev/sd[0-9][a-z] /mnt/usb[0-9], /sbin/mount_ntfs -m 770 -u oesys -g mntaccess -o nodev\,nosuid\,noexec\,ro /dev/sd[0-9][a-z] /mnt/usb[0-9], /usr/bin/su oesys -c /usr/bin/env DISPLAY=\:0 /usr/local/bin/gxmessage -title 'Automount Info' -name 'Automount Info' -file /usr/local/mybin/romessage.txt &, /usr/bin/su oesys -c /usr/bin/env DISPLAY=\:0 /usr/X11R6/bin/xmessage -file /usr/local/mybin/romessage.txt &, /sbin/mount_msdos -m 770 -o nodev\,nosuid\,noexec -u oesys -g mntaccess /dev/sd[0-9][a-z] /mnt/usb[0-9], /sbin/mount_msdos -m 770 -o ro\,nodev\,nosuid\,noexec -u oesys -g mntaccess /dev/sd[0-9][a-z] /mnt/usb[0-9], /sbin/disklabel sd[0-9] _______________________________________________________________________ /usr/local/mybin/romessage.txt _______________________________________________________________________ Mounted Device Read-Only due to the filesystem being marked as needing checking. Perhaps it was unplugged without first being unmounted? _______________________________________________________________________ _______________________________________________________________________ -- _______________________________________________________________________ 'Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface' (Doug McIlroy) In Other Words - Don't design like polkit or systemd _______________________________________________________________________