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

в 12:22, , рубрики: bluetooth, gentoo, linux, операционные системы, системное администрирование, метки: , ,

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

Введение

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

Подготовка

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

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

  1. Включить в BIOS поддержку Bluetooth, если это контролируется отдельным параметром, например как на ноутбуках Lenovo
  2. Определить какой bluetooth-контроллер используется в конфигурации компьютера:
    ~ $ lsusb | grep -i bluetooth
    Bus 001 Device 003: ID 0a5c:217f Broadcom Corp. Bluetooth Controller
    
  3. Включить в ядре поддержку подсистемы Bluetooth и необходимый драйвер для вашего контроллера:
    Kernel Configuration --->
    	Bluetooth subsystem support  --->
    		Bluetooth device drivers  --->
    			<*> HCI USB driver
    
  4. Сохранить конфигурацию, установить обновленное ядро и его модули, после чего перезагрузить систему для загрузки с новым ядром
  5. Установить пакет Bluez (с поддержкой test-programs), который будет выполнять работу на программном уровне. В пакетной базе Gentoo он выглядит так:
    *  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
    
  6. Под пользователем с правами root-а запустить демон bluetooth и добавить его в автозагрузку системы:
    ~ # /etc/init.d/bluetooth start
    ~ # rc-update add bluetooth default
    
  7. Проверить что bluetooth-устройство определилось и готово к работе:
    ~ # 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. Приступим.

  1. Включить bluetooth на телефоне и настроить его видимость для остальных участников сети:
    Автоматическая блокировка экрана в GNU/Linux
  2. На стороне компьютера запустить сканирование сети bluetooth, в результате чего мы определим адрес нашего мобильного телефона (можно подсмотреть на самом телефоне):
    ~ # hcitool scan
    Scanning ...
    	00:AA:70:31:9A:19	LG-E400
    
  3. Настроить сопряжение, на телефоне принять входящее подключение:
    ~ # 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)
    

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

  4. Добавить адрес мобильного телефона в список доверенных устройств:
    ~ # bluez-test-device trusted 00:AA:70:31:9A:19 yes
    
  5. Проверить доступность телефона с компьютера по bluetooth:
    ~ # l2ping -c 10 00:AA:70:31:9A:19
    
  6. Отключить видимость в настройках bluetooth мобильного телефона, если это не произошло автоматически:
    Автоматическая блокировка экрана в GNU/Linux
  7. Подготовить скрипт, который будет проверять доступность телефона и в случае недоступности блокировать экран:
    ~ # 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-extra/gnome-screensaver из окружения Gnome без всей остальной среды, поэтому команда блокировки экрана выглядит так — gnome-screensaver-command --lock

  8. Выполнить тестовую проверку под root-ом при включенном на телефоне bluetooth
  9. Отключить bluetooth на телефоне и повторно выполнить проверку, тоже с правами root-а
  10. Добавить ежеминутное правило в 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 секунды.

Автор: phs

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js