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
[bash]#!/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)[/bash]
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
[bash]#!/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[/bash]
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.
RT @OSWorldpl: Logowanie do systemu przy użyciu Bluetooth … http://t.co/7qC0zuvQ
Michał, a gdzie film którego nie mogłem wstawić? :D
Zjebałeś kod aplikacji. Czemu dajesz " a nie "?
Tak mi podmieniło.
To może poprawicie to? :]
Już zostało poprawione ;)
czemu w kanale rss jest taki wielki obrazek logo BT?
Będzie to poprawiane :)
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.
Super pomysł!
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…
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.
Fajne byłoby coś podobnego tylko z wifi
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)
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
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 ;)
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?
Klawiatura jest na stałe wbudowana w wygaszaczu ekranu, jest to matchbox-keyboard. Wszystko jest używalne na komputerach z ekranami dotykowymi :D