Files
clan-core/pkgs/clan-cli/clan_cli/flash/inhibit.sh

78 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# A function to log error messages
log_fatal() {
echo "FATAL: $*" >&2
}
# A function to log warning messages
log_warning() {
echo "WARNING: $*" >&2
}
# Function to enable inhibition (pause automounting)
enable_inhibition() {
local devices=("$@")
if ! command -v udevadm &> /dev/null; then
log_fatal "udev is required to disable automounting"
exit 1
fi
if [ "$EUID" -ne 0 ]; then
log_fatal "Root privileges are required to disable automounting"
exit 1
fi
local rules_dir="/run/udev/rules.d"
mkdir -p "$rules_dir"
for device in "${devices[@]}"; do
local devpath="$device"
local rule_file="$rules_dir/90-udisks-inhibit-${devpath//\//_}.rules"
echo 'SUBSYSTEM=="block", ENV{DEVNAME}=="'"$devpath"'*", ENV{UDISKS_IGNORE}="1"' > "$rule_file"
sync
done
udevadm control --reload
udevadm trigger --settle --subsystem-match=block
}
# Function to disable inhibition (cleanup)
disable_inhibition() {
local devices=("$@")
local rules_dir="/run/udev/rules.d"
for device in "${devices[@]}"; do
local devpath="$device"
local rule_file="$rules_dir/90-udisks-inhibit-${devpath//\//_}.rules"
rm -f "$rule_file" || log_warning "Could not remove file: $rule_file"
done
udevadm control --reload || log_warning "Could not reload udev rules"
udevadm trigger --settle --subsystem-match=block || log_warning "Could not trigger udev settle"
}
if [ "$#" -lt 2 ]; then
echo "Usage: $0 [enable|disable] /dev/sdX ..."
exit 1
fi
action=$1
shift
devices=("$@")
case "$action" in
enable)
enable_inhibition "${devices[@]}"
;;
disable)
disable_inhibition "${devices[@]}"
;;
*)
echo "Invalid action: $action"
echo "Usage: $0 [enable|disable] /dev/sdX ..."
exit 1
;;
esac