воскресенье, 23 августа 2020 г.

Черный экран при выходе из hibernate

Иногда после выхода из спящего режима нет изображения на экране ноутбука. Чаще это случается если ноутбук ушел в спящий режим подключенным к док-станции (в этом случае изображение выводится на два внешних монитора, а экран ноутбука отключен), а выходит из спящего режима будучи отключенным от док-станции. В такой момент можно подключиться по SSH и сделать перезагрузку или попытаться переключиться в консоль и затем обратно в иксы. Иногда последнее помогает, но не всегда. Не помню конда это началось, но из-за нехватки времени и спонтанности ошибки решение откладывалось до лучших времен. Сегодня воспроизвелось еще раз и пора с этим разобраться.

Отключение Bluetooth и WWAN при загрузке системы

На ноутбуке есть три беспроводных устройства (wifi, bluetooth и wwan) из которых постоянно используется только wifi. Чтобы не засорять эфир остальные устройства отключались вручную после загрузки. Хотя ноутбук перезагружается редко, но делать одно и тоже руками надоедает. Скрипт, который автоматически отключает bluetooth и wwan выглядит так (/usr/local/sbin/rfkill-boot-settings.sh)

#!/bin/sh

RFKILL_TYPE="bluetooth wwan"
RFKILL_BIN=/usr/sbin/rfkill

if [ ! -x "${RFKILL_BIN}" ]; then
    echo "Error: rfkill is not installed" >&2
    exit 1
fi

# shellcheck disable=SC2086
for RFKILL_ID in $(${RFKILL_BIN} list -n -o ID ${RFKILL_TYPE})
do
    # Some devices are nested and dissapear when parent device is blocked
    if ${RFKILL_BIN} list -n -o ID | grep -Eq '^\s+'${RFKILL_ID}'$'; then
        echo "Disabling ${RFKILL_ID}"
        ${RFKILL_BIN} block ${RFKILL_ID}
    else
        echo "Skipping ${RFKILL_ID}"
    fi
done

Автоматически запускать можно из /etc/rc.local или через systemd (/etc/systemd/system/rfkill-boot-settings.service)