По сути, вам нужно установить загрузчик GRUB в MBR USB-накопителя. Сейчас он установлен в MBR основного диска на ПК.
На данный момент самый простой способ сделать это:
grub-install /dev/sdX
, где X соответствует USB-накопителю. Это установит загрузчик в MBR на USB-накопителе. Чтобы уточнить, загрузчик GRUB будет установлен на диск до таблицы разделов, за пределами ваших трех контейнеров LUKS; сделать его загрузочным.
Подробнее об установке GRUB можно прочитать здесь . Так получилось, что документация Gentoo Linux по этой теме довольно исчерпывающая.
Команде notify-send
необходимо установить переменную окружения DBUS_SESSION_BUS_ADDRESS
, и она должна вызываться владельцем этой сеансовой шины в качестве пользователя.
В следующем скрипте функция notify_users
ищет все демоны dbus -, которые управляют сеансовой шиной. Командная строка такого демона выглядит так:
dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-ceVHx19Kiy
Для этого процесса определяется владелец и адрес dbus. Тогда мы можем использовать notify-send
. Этот сценарий должен информировать всех пользователей, вошедших в систему с помощью сеанса GDM. Но я никогда не проверял это.
Примечание. :Если вы вызываете это как не -root, у вас может быть запрошен пароль из-за использования sudo
.
#!/bin/bash
# Inform all logged on users
# Usage: notify_users TITLE MESSAGE [urgency [icon]]
notify_users()
{
typeset title="$1"
typeset message="$2"
typeset urgency="${3:-critical}"
typeset icon="${4:-}"
case "$urgency" in
"low") : ;;
"normal") : ;;
"critical") : ;;
*)
urgency="normal"
;;
esac
typeset ls user bus_addr
typeset IFS=$'\n'
# for all dbus-daemon processes that create a session bus
for ln in "$(ps -eo user,args | grep "dbus-daemon.*--session.*--address=" | grep -v grep)"; do
# get the user name
user="$(echo "$ln" | cut -d' ' -f 1)"
# get dbus address
bus_addr="$(echo "$ln" | sed 's/^.*--address=//;s/.*$//')"
# run notify-send with the correct user
DBUS_SESSION_BUS_ADDRESS="$bus_addr" sudo -u $user -E /usr/bin/notify-send -u "$urgency" -i "$icon" "$title" "$message"
done
}
state="$(upower -i $(upower -e | grep BAT))"
# if the state contains the word "discharging"
if [[ "$state" = *discharging* ]]; then
perc=$(echo "$state" | grep "percentage" | awk '{print $2}' | tr -d '%')
icon="$(echo "$state" | grep "icon-name:" | awk '{print $2}' | tr -d "'\"" )"
if [ "$perc" -lt 15 ]; then
notify_users "Battery Low!" "Please plugin charger... charge is only $perc%" "critical" "$icon"
fi
fi