Поток сознания, структурированный для более удобного восприятия... Прежде всего для сброса мыслей и впечатлений, которые оттягивают на себя слишком много ресурсов.

суббота, 26 декабря 2009 г.

Блокировка экрана по закрытию крышки на EeePC

где-то в районе Россия, Омская область, город Омск
  В жизни есть некоторые мелочи, к которым привыкаешь и считаешь их само собой разумеющимися. И которые очень хочется вернуть на место, если они куда-то исчезли. :) В данном случае речь идёт о блокировке системы по закрытию крышки ноутбука. На моём ThinkPad'е это действие выполняется по умолчанию — даже не нужно было лезть в настройку acpi-скриптов. А вот на eeePC — свои обработчики событий acpi, поэтому мне пришлось немного пошаманить. :)
  В общем, сразу к делу. B-) В настройках eeepc-acpi-scripts, которые хранятся в /etc/defaults/eeepc-acpi-scripts, есть переменная LID_CLOSE_ACTION, которая может принимать значения suspend, nothing или "". Последнее значение (пустая строка) обрабатывается как suspend, обеспечивая переход в ждущий режим, параметры которого задаются в этом файле ранее. В принципе, существует возможность задать в качестве значения переменной любую строку, и она будет запущена из скрипта-обработчика /etc/acpi/action/lid.sh как команда. Казалось бы, нужно просто поставить туда "xscreensaver-command -lock"... Но, оказывается, не всё так просто... %) Если запускать этот скрипт из командной строки, что-то даже работает. Но, поскольку его запуском занимается демон, то некоторые действия нужно делать "в обход", через обёртки, которые реализуются функциями из /usr/share/eeepc-acpi-scripts/functions.sh, как, например, функция lock_x_screen. Так вот после того, как я это обнаружил, всё получилось с полпинка. :)
  Общая идея: в качестве команды для LID_CLOSE_ACTION задаём скрипт, который импортирует functions.sh и с их помощью делает всё, что нам требуется. Более конкретно, для Debian Squeeze/Sid на eeePC, нужно сделать следующее:
  1. В директории /usr/local/bin от рута создаём скрипт eeepc-acpi-xlock.sh следующего содержания:

    #!/bin/sh

    FUNC_LIB=/usr/share/eeepc-acpi-scripts/functions.sh
    # Если библиотеки нет - молча сваливаем
    [ -e "$FUNC_LIB"] || exit 0
    # Если есть - импортируем
    . $FUNC_LIB

    lock_x_screen

    exit 0


  2. Устанавливаем разрешения на чтение и исполнение для всех:

    # chmod a+rx /usr/local/bin/eeepc-acpi-xlock.sh

  3. В файле /etc/defaults/eeepc-acpi-scripts переменной LID_CLOSE_ACTION присваиваем значение /usr/local/bin/eeepc-acpi-xlock.sh
Всё. =) Этого достаточно, чтобы, закрыв и открыв крышку, увидеть предложение ввести пароль. Даже ничего не нужно рестартовать: все скрипты запускаются динамически, поэтому все изменения ловятся сразу же после внесения.
Просто в качестве развлекухи :) перед запуском скринсейвера можно проиграть какой-нибудь звук или, например, запустить festival в режиме TTS, чтобы он что-нибудь ляпнул. Кстати, в Squeeze наконец-то появился русский голос для "фестиваля"! Но это уже совсем другая история. ;)

Комментариев нет:

Отправить комментарий