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.

  • Damian Kęska

    Michał, a gdzie film którego nie mogłem wstawić? :D

    • AppleFan

      Zjebałeś kod aplikacji. Czemu dajesz &quot; a nie "?

    • Damian Kęska

      Tak mi podmieniło.

    • AppleFan

      To może poprawicie to? :]

    • Damian Kęska

      Już zostało poprawione ;)

  • Michał

    czemu w kanale rss jest taki wielki obrazek logo BT?

  • Roomcays

    Ciekawy pomysł! Trochę jak płatności kartą zbliżeniową ;)
    Podobna idea może być całkiem przydatna w minikomputerach, o ile będą wyposażone w Bluetooth.

  • jacenty

    Super pomysł!

  • razi

    Aż bym se to zaimplementował, gdyby mój laptop miał wbudowany taki wynalazek jak Bluetooth, a nie musiał męczyć się doondlem za 2 zł, który zajmuje 1/3 portów USB niezostawiając miejsca na resztę potrzebnych mi urządzeń :)

    • No właśnie zawsze mnie zastanawiało to czemu nie montują w każdym laptopie bluetooth? Przecież małe to, przydatne, niedrogie…

    • Sanders

      Przydatne? Ani razu nie skorzystałem z Bluetootha na lapku. Zresztą bardzo często on nie działa pod LInuksem :/

    • Skąd wiesz, że nie działa skoro nigdy nie skorzystałeś? Ja uważam, że jest przydatny, np. gdy chcemy przesłać pliki z telefonu a nie mamy kabla (lub nie chce nam się podczepiać).

    • To ja mam od tego WiFi :P Z Bluettothem zawsze miałem sporo problemów. Parowanie sprzętu, wolny transfer i krótki zasięg.

  • ahaw

    Fajne byłoby coś podobnego tylko z wifi

  • Damian Kęska

    Kod z formatowaniem na wklejce: https://gist.github.com/webnull/4960643 (/home/webnull/.scripts/resume.py) https://gist.github.com/webnull/4960664 (/etc/pm/sleep.d/20_webnull)

  • mesiu84

    Pomysł fajny, ale jako że w ramach oszczędności baterii na smartfonie mam zawsze wyłączone BT, to raczej nie dla mnie :-(, popieram jedną z wcześniejszych wypowiedzi że WiFi byłoby lepsze, ale to jest trudniejsze do zrobienia :-D

    • Damian Kęska

      Nie prawda… z WiFi jest nawet łatwiej.

    • Hehe, masz wyłączony BT w ramach oszczędności baterii a wi-fi czerpie przecież więcej prądu ;)

  • Dawid

    Pytanie z innej beczki. Chciałbym zainstalować na Rasberry Pi jakaś dystrybucję, dokupić do tego ekran jakiś dodatkowy i teraz problem tkwi w klawiaturze. Widzę tutaj jakąś. Czy ona "wyjeżdża" po dotknięciu gdzieś pola edycji? Czy jak dokładnie działa? Dodatowo jak wygląda sprawa z ekranami dotykowymi na Linuksie, czy zwykle wystarczy standardowy sterownik jakiś czy jest troszkę zabawy?

    • Damian Kęska

      Klawiatura jest na stałe wbudowana w wygaszaczu ekranu, jest to matchbox-keyboard. Wszystko jest używalne na komputerach z ekranami dotykowymi :D