Автоматическая блокировка экрана в GNU/Linux

Часто ли уходя за очередной чашечкой кофе или выйдя из кабинета/офиса совершить личный звонок, ты ловишь себя на мысли что забыл заблокировать экран своего компьютера? А на компьютере в это время осталась открытая переписка в Skype/почте или еще хуже — сессия root’а в консоли? В результате ты стараешься вернуться к своему компьютеру как можно быстрее, чтобы добрые коллеги не успели поставить фоном рабочего стола обои с Черным Властелином. В данной статье приведу пример решения этой проблемы с блокировкой экрана, которое поможет закрыть доступ к рабочему столу в тот момент когда ты отойдешь от компьютера.

Введение

Опишу вкратце предлагаемое решение, для понимания того что мы будем сейчас делать. Сделаем так что операционная система будет сама, средствами Bluetooth, проверять как далеко находится пользователь, и в случае «недосягаемости» будет автоматически блокировать экран. Процесс снятия блокировки останется на совести пользователя, и будет заключаться в вводе пароля, который используется в его учетной записи. Автоматически снимать блокировку довольно рискованная затея поэтому данный сценарий рассматривать не будем. По уровню сложности данная статья ориентирована на продвинутых пользователей Linux, т.к. некоторые этапы настройки будут описаны без лишних деталей, полагаясь на очевидность, чтобы не уходить в сторону от основной освещаемой темы.

Подготовка

Для начала необходимо убедиться что наш компьютер и мобильный телефон поддерживают технологию Bluetooth. Если с мобильным телефон проблем не должно возникнуть, т.к. большинство современных аппаратов имеют поддержку «синего зуба», то с компьютером вполне могут. Не буду подробно рассказывать как настроить Bluetooth в разных дистрибутивах Linux, а просто опишу основные этапы настройки поддержки оного, при условии что аппаратная часть включает в себя необходимые компоненты, на примере Gentoo.

Основные этапы настройки поддержки Bluetooth в Linux

~ $ lsusb | grep -i bluetooth
Bus 001 Device 003: ID 0a5c:217f Broadcom Corp. Bluetooth Controller  
Kernel Configuration --->  
    Bluetooth subsystem support  --->
        Bluetooth device drivers  --->
            <*> HCI USB driver
*  net-wireless/bluez
      Latest version available: 4.101-r5
      Latest version installed: [ Not Installed ]
      Size of files: 866 kB
      Homepage:      http://www.bluez.org/
      Description:   Bluetooth Tools and System Daemons for Linux
      License:       GPL-2 LGPL-2.1
~ # /etc/init.d/bluetooth start
~ # rc-update add bluetooth default
~ # hcitool dev
Devices:  
    hci0    CC:52:AF:E3:FB:67

~ # hciconfig list
hci0:    Type: BR/EDR  Bus: USB  
    BD Address: CC:52:AF:E3:FB:67  ACL MTU: 1021:8  SCO MTU: 64:1
    UP RUNNING PSCAN 
...

На этом подготовка завершена, переходим к следующему этапу.

Настройка

В данном разделе будет вся суть решения, а именно мы настроим сопряжение между мобильным телефоном и компьютером. После чего в операционной системе подготовим скрипт проверки доступности телефона по каналу Bluetooth, который будет вызываться каждую минуту средствами демона-планировщика Cron. Приступим.

~ # hcitool scan
Scanning ...  
    00:AA:70:31:9A:19    LG-E400
~ # simple-agent hci0 00:AA:70:31:9A:19
RequestConfirmation (/org/bluez/3522/hci0/dev_00_AA_70_31_9A_19, 724215)  
Confirm passkey (yes/no): yes  
Release  
New device (/org/bluez/3522/hci0/dev_00_AA_70_31_9A_19)  

~ # bluez-test-device trusted 00:AA:70:31:9A:19 yes
~ # l2ping -c 10 00:AA:70:31:9A:19
~ # if ! /usr/bin/l2ping -c 1 <%ADDR%> ; then su <%USERNAME%> -c '<%SCREENLOCKER%>' ; fi

В моем случае: <%ADDR%> = 00:AA:70:31:9A:19, <%USERNAME%> - не root-пользователь, под которым запускаются X и вся остальная основная работа в системе, <%SCREENLOCKER%> - команда блокировки экрана - gnome-screensaver-command --lock. * Выполнить тестовую проверку под root-ом при включенном на телефоне bluetooth * Отключить bluetooth на телефоне и повторно выполнить проверку, тоже с правами root-а * Добавить ежеминутное правило в crontab:

~ # crontab -l
#minute (0-59),
#|    hour (0-23),
#|    |   day of the month (1-31),
#|    |   |   month of the year (1-12),
#|    |   |   |   day of the week (0-6 with 0=Sunday).
#|    |   |   |   |   commands

*    *   *   *   *   export DISPLAY=:0 && if ! /usr/bin/l2ping -c 1 <%ADDR%> >/dev/null 2>/dev/null ; then su <%USERNAME%> -c '<%SCREENLOCKER%>' ; fi

Если пугают такие правила в crontab, то можно проверку вынести в отдельный скрипт в каталоге /usr/local/sbin, c более хитрыми проверками, который потом указать в правиле crontab.

На этом настройка и проверка завершены.

Результат

Мы получили инструмент, который будет следить за нашим мобильным телефоном и в случае его удаления от компьютера заблокирует экран. В реальных условиях это расстояние не больше 10-20 метров и bluetooth на телефоне должен работать стабильно. Ежедневный ресурс батарейки мобильного телефона несколько уменьшиться, т.к. мы используем короткие подключения по 2-3 секунды.

Back