78 lines
1.8 KiB
Bash
Executable File
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 |