/usr/bin/lockfs-notify is in bilibop-lockfs 0.5.4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | #!/bin/sh
set -e
# /usr/bin/lockfs-notify
#
# Notify the user that changes on filesystems are allowed or not. This script
# should be called from /etc/xdg/autostart/bilibop-lockfs.desktop or something
# like, but can be run manually too.
# TODO: translations and gettext support.
PATH="/bin:/usr/bin"
short_usage() {
cat <<EOF
Usage: ${0##*/} --help
EOF
}
usage() {
cat <<EOF
${0##*/}: send a notification on the desktop to show, for each local
mountpoint, if changes will be lost or kept at shutdown.
OPTIONS:
-a, --always Show status of both locked and no-locked filesystems.
-h, --help Print this message on standard output and exit.
-l, --lockfs Show status of locked filesystems only.
-n, --nolockfs Show status of non-locked filesystems only.
EOF
}
# Load functions and get other variables:
. /lib/bilibop/lockfs.sh
get_udev_root
get_bilibop_variables
# The behaviour of this script depends on the admin settings:
case "${BILIBOP_LOCKFS_NOTIFY_POLICY}" in
never)
exit 0
;;
lockfs|nolockfs)
;;
*)
# This is the default and the fallback:
BILIBOP_LOCKFS_NOTIFY_POLICY="always"
;;
esac
# Parse options with getopt.
if ARGS="$(getopt -o ahlnt: --long always,help,lockfs,nolockfs,expire-time: -n "${0##*/}" -- "${@}")"; then
eval set -- "$ARGS"
else
short_usage >&2
exit 1
fi
# This admin's defined behaviour can be overriden from the commandline.
# This can be useful for the user (by copying lockfs-notify.desktop from
# /etc/xdg/autostart to ~/.config/autostart, and modifying the 'Exec='
# line, or setting 'Hidden=true')
while true
do
case "${1}" in
-a|--always)
BILIBOP_LOCKFS_NOTIFY_POLICY="always"
shift
;;
-h|--help)
usage
exit 0
;;
-l|--lockfs)
BILIBOP_LOCKFS_NOTIFY_POLICY="lockfs"
shift
;;
-n|--nolockfs)
BILIBOP_LOCKFS_NOTIFY_POLICY="nolockfs"
shift
;;
-t|--expire-time)
if echo "${2}" | grep -q '^[0-9]\+$'
then EXPIRE_TIME="${2}"
[ ${2} -lt 1000 ] &&
EXPIRE_TIME="0"
else EXPIRE_TIME="-1"
fi
shift 2
;;
--)
break
;;
*)
unknown_argument "${arg}" >&2
short_usage >&2
exit 1
;;
esac
done
# If this script is not called in a graphical environment, nothing to do:
if [ -z "${DISPLAY}" ]
then echo "${0##*/}: no DISPLAY found." >&2
exit 99
else
case "$(tty)" in
${udev_root}/console|${udev_root}/tty?*)
echo "${0##*/}: must be run from X." >&2
exit 99
;;
esac
fi
# If the tool to send notification is missing, nothing else to do:
if [ ! -x /usr/bin/notify-send ]
then echo "${0##*/}: '/usr/bin/notify-send' not found: you should install 'libnotify-bin'." >&2
exit 2
fi
locked=
unlocked=
perm_or_temp_fs=
this_fs=
# 1. bilibop-lockfs is disabled:
if is_aufs_mountpoint -q / &&
[ -f "${BILIBOP_RUNDIR}/lock" ]; then
METHOD="aufs"
elif is_overlay_mountpoint -q / &&
[ -f "${BILIBOP_RUNDIR}/lock" ]; then
METHOD="overlay"
else
case "${BILIBOP_LOCKFS_NOTIFY_POLICY}" in
always|nolockfs)
notify-send ${EXPIRE_TIME:+--expire-time=${EXPIRE_TIME}} \
--urgency="normal" \
--icon="changes-allow" \
"bilibop-lockfs is disabled" \
"All informations about the current\nsession can be written on the disk.\nYou have been warned."
;;
esac
# Nothing else to do:
exit 0
fi
# 2. bilibop-lockfs is enabled
# 2.1. Send notification for locked fs:
case "${BILIBOP_LOCKFS_NOTIFY_POLICY}" in
always|lockfs)
for fs in $(aufs_mountpoints; overlay_mountpoints)
do
locked="${locked:+${locked}, }${fs}"
done
if [ -z "${locked}" ]
then
notify-send \
--urgency="critical" \
--icon="error" \
"*** BILIBOP LOCKFS - ERROR ***" \
"Unknown error"
exit 3
elif echo "${locked}" | grep -q ', '
then
locked="$(echo ${locked} | sed "s;, \(/[^,' ]\+\)$; and \1 are;")"
perm_or_temp_fs="volatile filesystems"
this_fs="these filesystems"
else
locked="${locked} is"
perm_or_temp_fs="a volatile filesystem"
this_fs="this filesystem"
fi
notify-send ${EXPIRE_TIME:+--expire-time=${EXPIRE_TIME}} \
--urgency="normal" \
--icon="changes-prevent" \
"bilibop-lockfs is enabled" \
"${locked} mounted as ${perm_or_temp_fs} (${METHOD}).\nAll changes on ${this_fs} will be lost at shutdown.\nYou have been warned."
;;
esac
# 2.1. Send notification for non-locked fs:
case "${BILIBOP_LOCKFS_NOTIFY_POLICY}" in
always|nolockfs)
BILIBOP_DISK="$(physical_hard_disk /)"
for fs in $(grep '^/' /proc/mounts | grep -v "^[^ ]\+\s/${BILIBOP_LOCKFS_PATH_PREFIX:-${METHOD}}/" | sed 's;^[^ ]\+\s\(/[^ ]*\)\s.*;\1;')
do
[ "$(physical_hard_disk ${fs})" = "${BILIBOP_DISK}" ] &&
unlocked="${unlocked:+${unlocked}, }${fs}"
done
if [ -z "${unlocked}" ]
then exit 0
elif echo "${unlocked}" | grep -q ', '
then
unlocked="$(echo ${unlocked} | sed "s;, \(/[^, ]\+\)$; and \1 are;")"
perm_or_temp_fs="persistent filesystems"
this_fs="these filesystems"
else
unlocked="${unlocked} is"
perm_or_temp_fs="a persistent filesystem"
this_fs="this filesystem"
fi
notify-send ${EXPIRE_TIME:+--expire-time=${EXPIRE_TIME}} \
--urgency="normal" \
--icon="changes-allow" \
"bilibop-lockfs whitelist" \
"${unlocked} mounted as ${perm_or_temp_fs}.\nAll changes on ${this_fs} will be kept at shutdown.\nYou have been warned."
esac
|