You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.0 KiB
Bash
76 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail;
|
|
|
|
LOGFILE="/tmp/usb_automount.log";
|
|
USERNAME={{ admin_user | quote }};
|
|
PROCNAME="caja";
|
|
MANAGER_NAME="caja";
|
|
|
|
function log() {
|
|
if [ -z "${1:-}" ]; then
|
|
/usr/bin/env ts '[%Y-%m-%d %H:%M:%S]' >> "$LOGFILE";
|
|
else
|
|
echo "$@" | log;
|
|
fi
|
|
}
|
|
|
|
function mkdirU() {
|
|
log "Ensure $2 exists and is owned by $1";
|
|
mkdir -p "$2" 2>&1 | log;
|
|
chown "$1:$1" "$2" 2>&1 | log;
|
|
}
|
|
|
|
function getVal() {
|
|
grep --only-matching --perl-regexp '(?<=\s'"$1"'=")[0-9A-Za-z-]+(?=")' || true;
|
|
}
|
|
|
|
function getMountDir() {
|
|
local info="$(blkid "$2")";
|
|
local label="$(<<<"$info" getVal LABEL)";
|
|
local uuid="$(<<<"$info" getVal UUID)";
|
|
local partuuid="$(<<<"$info" getVal PARTUUID)";
|
|
if [ -n "$label" ]; then
|
|
echo "$1/$label";
|
|
elif [ -n "$uuid" ]; then
|
|
echo "$1/$uuid";
|
|
elif [ -n "$partuuid" ]; then
|
|
echo "$1/$partuuid";
|
|
else
|
|
mktemp -d "$1/usb.XXXXXXXX";
|
|
fi
|
|
}
|
|
|
|
log "Inserted device $DEVNAME";
|
|
|
|
mountDir="/media/$USERNAME";
|
|
mkdirU "$USERNAME" "$mountDir";
|
|
|
|
log "Get userId and groupId of $USERNAME";
|
|
userId=$(id -u "$USERNAME");
|
|
groupId=$(id -g "$USERNAME");
|
|
|
|
log "Get directory to mount $DEVNAME";
|
|
mountDir="$(getMountDir "$mountDir" "$DEVNAME")";
|
|
mkdirU "$USERNAME" "$mountDir";
|
|
log "Mount device $DEVNAME to $mountDir"
|
|
if ! mount -o ro,uid=$userId,gid=$groupId "$DEVNAME" "$mountDir" 2>&1 | log; then
|
|
log "Failed to mount $DEVNAME";
|
|
exit 2;
|
|
fi
|
|
|
|
procId="$( (ps --user "$USERNAME" --format pid=,cmd= | grep --only-matching --perl-regexp '(?<!\d)\d+(?=\s'"$PROCNAME)") || echo "")";
|
|
if [ -z "$procId" ]; then
|
|
log "Admin user is not logged in => do not open file manager";
|
|
exit 0;
|
|
fi
|
|
|
|
while read -r -d "" record; do
|
|
if [[ $record =~ ^[a-zA-Z_][a-zA-Z0-9_]*= ]]; then
|
|
export "$(printf %q "$record")";
|
|
fi
|
|
done < /proc/"$procId"/environ;
|
|
log "Try to launch $MANAGER_NAME on DISPLAY=$DISPLAY";
|
|
sudo -u "$USERNAME" "$MANAGER_NAME" "$mountDir" &
|
|
log "Launched file manager";
|