Jak wykorzystać możliwości środowiska Uniksowego do swoich potrzeb w najprostszy możliwy sposób. Na przykładzie odblokowywania ekranu komputera bez klawiatury przy pomocy telefonu z bluetooth

Debian Testing – na taki system zdecydowałem się, aby używać na komputerze klasy UMPC (Ultra Micro Personal Computer). Początkowo po postawieniu Xfce niczym nie różnił się od standardowego desktopu, lecz sztuka w modyfikacji systemu polega właśnie na tym, aby dostosować go do urządzenia, na którym pracuje przy pomocy wszelkich dostępnych narzędzi.

Co zatem odgrywa tutaj dużą rolę? Powłoka, shell – dzięki temu, że możemy kontrolować inne programy prostymi poleceniami, a także wywoływać skrypty przy poszczególnych zdarzeniach np. podłączenie laptopa do prądu, hibernacja, uśpienie, wznowienie, zalogowanie, pobranie pliku czy przy innych mniejszych czynnościach daje nam to olbrzymią swobodę, w zaprogramowaniu systemu.

Nieliczni użytkownicy Linuksa kompilują najnowsze jądra z odpowiednio przygotowaną konfiguracją, głównie użytkownicy Gentoo. Aby za każdym razem nie edytować konfiguracji programu rozruchowego, możliwe jest stworzenie skryptu, który wykona się podczas instalacji jądra systemu. Skrypt wystarczy stworzyć w katalogu /etc/kernel/postinst.d/ i nadać mu atrybut uruchamiania. Zostanie on wywołany przy każdym poleceniu make install w katalogu jądra systemu.

Idąc tym samym tokiem myślenia sprawdziłem, jak wygląda sprawa z hibernacją, uśpieniem i wznawianiem systemu, gdyż w mojej głowie zaistniał ciekawy pomysł, wcale nie trudny do zrealizowania. W katalogu /etc/pm/sleep.d/ znalazłem jeden skrypt, który skopiowałem i zapisałem pod inną nazwą “20_webnull”. Jako, że jestem programistą języka Python, poszukałem w sieci jak używać interfejsu bluetooth w Pythonie – sprawa okazała się całkiem prosta, a rozwiązanie którego szukałem zajmuje dokładnie dwie linie kodu.

Skrypt, który napisałem sprawdza czy mój telefon komórkowy znajduje się w zasięgu małego komputerka, jeśli tak to zdejmuje wygaszacz ekranu abym nie musiał wpisywać hasła – przydatna rzecz dla osób którym się nie chce wpisywać hasła a także takim które obawiają się przed podejrzeniem hasła przez osoby znajdujące się w pobliżu. To jest jak kod SMS do odblokowania komputera, jednak w razie rozładowania się telefonu istnieje możliwość podania hasła ręcznie.

/home/webnull/.scripts/resume.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import os
import bluetooth
import time

lookingFor = "aa:bb:cc:xx:yy:zz" # adres MAC interfejsu bluetooth telefonu
retries = 3
breakTime = 5 # sekundy
i = 0

while i < retries:
i = i + 1

print("Trying... ("+str(i)+"/"+str(retries)+")")

# jeśli telefon został znaleziony to odblokowujemy ekran i zatrzymujemy pętlę
if bluetooth.lookup_name(lookingFor) != None:
print("Found a secure phone.")
os.system("/usr/bin/gnome-screensaver-command -d")
os.system("notify-send -i screensaver \"Blokada ekranu\" \"Ekran został odblokowany przy pomocy telefonu\"")
break

# telefon nie został odnaleziony w "retries" liczbach prób z odstępami czasowymi co "breakTime" sekund
if i == retries:
print("Giving up...")
sys.exit(0)

time.sleep(breakTime)

sys.exit(0)

Aby powyższy skrypt uruchamiał się w odpowiednim momencie należy utworzyć inny skrypt który uruchomi go zaraz po wyjściu z hibernacji bądź uśpienia.

/etc/pm/sleep.d/20_webnull

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DISPLAY=:0
export PATH
export DISPLAY
user="webnull" # change to yourself
case "${1}" in
resume|thaw) # oblokowywujemy ekran
su "$user" -c "/bin/bash -c \"DISPLAY=:0; /home/webnull/.scripts/resume.py\""
;;
hibernate|suspend) # blokada ekranu
su "$user" -c "/bin/bash -c \"DISPLAY=:0; /usr/bin/gnome-screensaver-command --lock\""
;;
esac

Gadżet jest bardzo ciekawy i efektowny, a jego implementacja w Linuksie dla wprawnego programisty to maksymalnie pół godziny. To wszystko dzięki tak zwanym “zaczepom”, które implementują przeróżne elementy systemu, takie jak pm-utils – można wtedy wykonać dowolną akcję w jakimś ustalonym momencie.

Powłoka Linuksa daje bardzo duże możliwości dlatego ilość tak zwanych dystrybucji rośnie. Każda dystrybucja dodaje jakieś drobne elementy, w zasadzie sam mógłbym pokusić się o stworzenie systemu “UMPC OS” opartego o Debiana Testing ze skonfigurowanym wygaszaczem ekranu z klawiaturą ekranową, odblokowywaniem ekranu przez bluetooth, nietypowym oszczędzaniem energii czy innymi bajerami stworzonymi specjalnie z myślą o tego typu sprzęcie.