Tag Results for 'openmoko'

L'idea principale è quella di realizzare un grabber di gesture realizzabili sullo schermo del nostro device. Ad ogni movimento delle dita sullo schermo potrebbe corrispondere l'apertura di una specifica applicazione. Nel caso di seguito è possibile scorrere un dito dall'alto a sinistra dello schermo sino al basso a destra per fare in modo che una applicazione a scelta venga avviata. L'immagine di seguito potrà chiarire;

Parte del codice deriva dallo screenlocker di lindi, il quale blocca lo schermo sino a quando una gesture verticale (dall'alto al basso) viene rilevata.
In touchscreen_gesture.c viene usato EVIOCGRAB mediante I/O asincrono per evitare che lo schermo venga bloccato durante l'esecuzione (vedasi ioctl(...)) e la matematica delle operazioni diviene leggermente più complessa. Giustamente occorre verificare che gli eventi legati alla coordinata x non assumano valori costanti e che questi siano crescenti.

[C] Download source code:

touchscreen_gesture.c ~ Do you need help?

Evito di trattare nel dettaglio la matematica delle operazioni. In pratica lo schermo riceve degli eventi tra cui le coordinate x ed y del mouse (del dito nel nostro caso) e touchscreen_gesture.c controlla ciclicamente la storia degli eventi ricevuti. Qualora la gesture dovesse matchare con quella mostrata sopra verrà aperta una finestra con zenity. E' possibile modificare il comando da eseguire a seguito della gesture, vedasi la riga relativa all'execlp(...). Il risultato a seguito della gesture è il seguente mostrato:




<b>Compilazione:</b><br>
gcc -c touchscreen_gesture.c<br>
gcc -o touchscreen_gesture touchscreen_gesture.o<br><br>

<b>Uso: </b> <br>
./touchscreen_gesture /dev/input/touchscreen0

Salve ragazzi, dopo un pò di problemi con Arch dovuti all'aggiornamento di gnome, ho deciso di proporvi qualche piccola miglioria riguardo l'ui presentata precedentemente.
Dopo una serie di considerazioni ho concluso che un pannello (tint2 nel dettaglio) non è affatto piacevole. D'altro canto un orologio centrale (conky) risulta molto funzionale e coglie a pieno lo spirito minimale che contraddistingue il tutto :)

Qui riporto un'immagine:

L'interfaccia è essenziale, ma carina. Tint2 è stato rimosso ed un grande orologio "riempie" lo schermo; è possibile trovare il .conkyrc qui. Ho tentato a lungo di compilare conky 1.7.2 in modo tale da avere il supporto ad i widgets in lua, tuttavia mi sono scontrato con un vero e proprio dependency hell.

Come precedentemente messo alla luce è pensabile di sostituire l'openmoko-panel-plugin con opportuni pipe menu per openbox. Da cui riporto il codice per mostrare ed editare la luminosità dello schermo ed avere statistiche sulla batteria. Il tutto è banale, ma al tempo stesso punto di inizio per qualcosa di più complesso.

[+] brightness
#!/bin/sh
#brightness -> pipe menu per la luminosità dello schermo

bright=$(cat /sys/class/backlight/gta02-bl/brightness)

cat << _EOF_
<openbox_pipe_menu>
<item label="Level: $bright">
<action name="Execute">
<execute>-</execute>
</action>
</item>
<separator/>
<item label="Set to 20%">
<action name="Execute">
<execute>brightness 51</execute>
</action>
</item>
<item label="Set to 40%">
<action name="Execute">
<execute>brightness 102</execute>
</action>
</item>
<item label="Set to 60%">
<action name="Execute">
<execute>brightness 153</execute>
</action>
</item>
<item label="Set to 80%">
<action name="Execute">
<execute>brightness 204</execute>
</action>
</item>
<item label="Set to 100%">
<action name="Execute">
<execute>brightness 255</execute>
</action>
</item>
</openbox_pipe_menu>
_EOF_

[+] batterylevel
#!/bin/sh
#batterylevel -> pipe menu per il livello di carica della batteria

Batterylev=$(cat /sys/class/power_supply/battery/capacity)
Status=$(cat /sys/class/power_supply/battery/status)

cat << _EOF_
<openbox_pipe_menu>
<item label="$Batterylev % ~ $Status">
<action name="Execute">
<execute>
$Batterylev
</execute>
</action>
</item>
</openbox_pipe_menu>
_EOF_



La soluzione può risultare a tratti sporca, si può risolvere creando in ~ (nella home, /root di default) un file .var del tipo:

export sys_brightness=/sys/class/backlight/gta02-bl/brightness
export sys_battery=/sys/class/power_supply/battery

Quindi modificare i pipe menu ad hoc "includendo" quest'ultimo in modo tale da modularizzare il tutto.. ;)

Keyboard?

Xvkbd è un'ottima soluzione, nonostante occorra individuare un giusto layout in modo tale che sia effettivamente finger-friendly. D'altronde questa tastiera è usata anche su NeoPwn. :P


File correlati:

L'"esperimento" prosegue...ghghgh :) [Se desideri saltare l'intera trattazione, guarda il risultato].

(Openbox files -> menu.xml | rc.xml)

In riferimento ai post precedenti la possibilità di mandare file mediante il bluetooth verso altri dispositivi mobili dal terminale senza procedere con il pairing non mi sembra realizzabile su debian (sul neofreerunner). Vi prego di smentirmi.
Ho cercato di ottimizzare qualche altro aspetto del rootmenu di openbox tramite l'introduzione di ulteriori utili pipemenu.
Anzitutto è possibile scaricare da qui un pipemenu (dirlist) che permette di navigare il filesystem ricorsivamente. Esso è notevolmente efficace e per di più permette di associare a file con estensioni specifiche l'applicazione con cui aprirli. Vedi l'immagine seguente per avere un'idea a riguardo.

2l.png

Per quanto riguarda la tastiera, ho pensato di automatizzare l'apertura e la chiusura della stessa. Dal menu è possibile aprire la matchbox-keyboard e quando questa è attiva, è possibile chiuderla con soli tre tocchi sullo schermo (apertura menu - kbd - close kbd).

0l.png
1l.png

Di seguito riporto il pipemenu in bash (kbd):
#!/bin/bash


IsKbdOn=$(pgrep matchbox-keyboa)


if [ "$IsKbdOn" != "" ];
then

cat << _EOF_
<openbox_pipe_menu>
<item label="Close kbd">
<action name="Execute">
<execute>
kill -9 $IsKbdOn
</execute>
</action>
</item>
</openbox_pipe_menu>
_EOF_

else

cat << _EOF_
<openbox_pipe_menu>
<item label="Open Kbd">
<action name="Execute">
<execute>
matchbox-keyboard
</execute>
</action>
</item>
</openbox_pipe_menu>
_EOF_
fi

Infine ho pensato di ricorrere a conky per mostrare in modo immediato lo stato del sistema e soprattuto l'ora. Utilizzare qualcosa di più gradevole, quali gdesklets o adesklets, avrebbe migliorato di gran lunga la user interface, ciononostante ho appurato che un orologio digitale su desktop produce un notevole rallentamento. Da cui conky fa al caso nostro.

Di seguito riporto il .conkyrc:

#avoid flicker
double_buffer yes

own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorate,sticky,skip_taskbar,skip_pager

#borders
draw_borders no
border_margin 0

#shades
draw_shades no

#position
gap_x 2
gap_y 0
alignment top

#behaviour
update_interval 15

#colour
default_color 8f8f8f
default_shade_color 000000

#font
use_xft yes
xftfont Arial Condensed:pixelsize=15

#to prevent window from moving
use_spacer none
minimum_size 1098 0

TEXT

Cpu: ${color e0e0e0}${font}${cpu}% ${color} Mem: ${color e0e0e0}${font}${mem} ${color} |
${color} Up: ${color e0e0e0}${font}${uptime_short}${color} |
Ora: ${color e0e0e0}${font}${time %H:%M} ${color}


3l.png

Non intendo dilungarmi più di tanto.. Per informazioni commentate :)

wallpaper by ~ScaryDeadGirl

Salve ragazzi! Propongo una fase di miglioramento per quanto riguarda il post precedente.
Come mostrato il design di Debian sul freerunner con openbox installato non è affatto accattivante :(, per cui ho provato a rendere il tutto più gradevole. Inoltre sono riuscito con un "barbatrucco" a mostrare la scansione dei dispositivi bluetooth attivi direttamente dal root-menu di openbox.

La nuova veste è mostrata qui di seguito. Tint2 è stato customizzato per essere praticamente invisibile! Naturalmente la pressione con un dito sul desktop causa l'apertura del menu.

one.png
one.png

La seconda immagine mostra la possibilità (peraltro già discussa) di attivare/disattivare il bt mediante un pipemenu.

[+] L'idea da esporre consiste nella necessità di mostrare i risultati di una scansione dei dispositivi bluetooth direttamente dal menu con un pipemenu ad hoc. Ciò è possibile modificando opportunamente l'output del comando
hcitool scan

Ho pensato di ricorrere a crontab in modo tale che ogni minuto esegua una scansione bt e scriva il risultato su di un file in /root/scan.txt. A seguito di ciò viene invocato uno script in bash il quale rende l'output compatibile alla sintassi di un menu per openbox e crea un file /root/p.txt il cui contenuto diverrà il menu da mostrare... In pratica è più complesso a dirlo che a farlo!

Qui di seguito riporto il contenuto di /etc/crontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*/1 * * * * root hcitool scan > /root/scan.txt && /root/p
#

/root/p:
sed -i '/^Scanning.../ {
d
}' scan.txt

echo \<openbox_pipe_menu\> > p.txt

while read line
do
echo "<item label=\"" >> p.txt
echo "${line}" | sed s/^[[:blank:]]*//g | awk '{print $2}' >> p.txt;
echo "\"><action name=\"Execute\"><execute>k</execute></action></item>" >> p.txt
done < scan.txt

echo \</openbox_pipe_menu\> >> p.txt

E' facile intuire che ogni minuto viene aggiornato /root/scan.txt e invocato /root/p, il quale produce un file /root/p.txt che include il menu (openbox compliant). Da cui il pipemenu associato si basa sull'invocazione si uno script in bash in /bin/verifica.

/bin/verifica:#!/bin/bash

sbt=$(cat /root/p.txt)

if [ -f /root/p.txt ]
then
echo "$sbt";
rm /root/p.txt;
fi

Esso mostra il contenuto di /root/p.txt (se prodotto).
Per cui ad ogni minuto una nuova scansione può portare ad un nuovo menu con relativi dispositivi bluetooth individuati nelle vicinanze... :)

three.png

Nell'immagine viene mostrato il risultato di una scansione: sono stati individuati due dispositivi!

Nota Bene: Quanto mostrato rimane comunque fine a se stesso (per il momento...), per il semplice motivo che occorre realizzare un sistema che permetta di scambiare file direttamente dal menu in modo seppur rudimentale.

Di seguito un piccolo particolare di tint2 con più finestre attive. Esso risulta con tale configurazione estremamente finger-friendly!

five.png

Ulteriore "esperimento":

Ho tentato di installare con successo xcompmgr per il compositing. Il risultato seppur quasi impercettibile è carino ed inoltre il sistema non sembra molto appesantito. Naturalmente si tratta di puro design.

six.png

Si notino le piccole ombre sui bordi del menu.

wallpaper by JordanBalch

Salve ragazzi, scrivo questo post per proporre un tentativo effettuato sul Neo Freerunner. La distro in questione è una Debian, installata mediante lo script automatico (si veda qui). Tutte le informazioni a riguardo sono presenti nel link suddetto.
Si è pensato di realizzare un'interfaccia minimale il più finger-friendly possibile, vale a dire utilizzabile in modo piuttosto immediato mediante le proprie dita. In realtà non è propriamente corretto parlare di interfaccia, poichè si tratta di alcune applicazioni leggermente personalizzate per rendere il tutto piacevole e funzionale. Il tutto è ancora in uno stato embrionale (ancestrale!).

Si è pensato di evitare di installare un DE completo, quale e17 o LXDE o XFCE. Si è solo rimpiazzato il window manager (matchbox-window-manager) con Openbox collegandosi al neo via ssh.

apt-get install openbox

L'idea principale consiste nella possibilità di gestire il tutto (attivazione/spegnimento bt, wifi, keyboard, etc.) mediante il root-menu fornito da openbox. Modificando lo stesso è possibile sostiture l'openmoko-panel-plugin con un meccanismo estremamente intuitivo e leggero.

L'utilizzo dei pipe-menu diviene fondamentale in questa direzione, poichè garantisce la possibilità di gestire processi, aprire apps e gestire bt/wifi/keyboard con pochi tocchi sullo schermo. Effettivamente l'utilizzo dei pipe-menu può risultare una valida alternativa ad i widgets ora tanto in voga.

N.B. Mi rendo comunque conto che allo stato delle cose, l'utilizzo di zhone o equivalenti risulta fondamentale per utilizzare il neo come telefonino, per cui l'approccio suddetto non porta ad un'effettiva innovazione.

p1.png

p3.png

Informazioni pratiche

Si propone di installare feh, openbox e tint2. Feh permette di modificare lo sfondo del desktop, mentre tint2 è un pannello estremamente piacevole e customizzabile. La modifica dell'intestazione delle finestre e del root-menu è realizzabile mediante obconf e obmenu dal neo stesso.

[+] Propongo di seguito il contenuto del file /root/.xsession:

#!/bin/sh
#trayer --edge top &
#openmoko-panel-plugin &
#zhone &
tint2 &
feh --bg-center /root/6.png &
#exec matchbox-window-manager -use_titlebar no -use_cursor no &
exec openbox --replace

Ove si tenga conto che feh --bg-center /root/6.png & permette di modificare il wallpaper da applicare come sfondo.

[+] Il file di configurazione di tint2 si trova in /root/.config/tint2/tint2rc ed è possibile scaricarlo qui (occorre rimuovere il '.txt'). Si è fatto riferimento alla "grandezza" delle proprie dita per rendere il pannello facilmente utilizzabile. Inoltre (come spesso messo in luce dalla comunità) la conformazione del Neo presenta un difetto, ossia lo schermo è circondato da un bordo rialzato che rende quasi non raggiungibili con le dita le sezioni dello schermo più vicine ai bordi. Da cui si è pensato di spostare di qualche pixel il pannello verso l'alto per evitare tale situazione.

[+] Openbox è facilmente personalizzabile mediante obconf e obmenu. Si è realizzato di aumentare le dimensioni dei font relativi alle finestre ed ai menu per fare in modo che questi dilatassero le proprie dimensioni e divenissero fruibili con le dita. I file sono presenti in /root/.config/openbox/; menu.xml e rc.xml.

Root-menu & pipemenu

Solitamente il root-menu viene abilitato al click con il tasto destro sul desktop, modificando l'rc.xml si può fare in modo che esso appaia al click con il tasto sinistro. Ciò risulta ottimale, poichè non occorre fare in modo che il neo riconosca un evento "tasto destro" (cosa peraltro fattibile con un tocco prolungato sullo schermo). Per cui a ciascun tocco sullo schermo (desktop) corrisponde l'apertura del menu dal quale si possono scegliere le applicazioni da lanciare.

I pipe menu permettono invece di utilizzare il menu in modo dinamico. Una prima prova è stata compiuta mediante un menu dinamico che permettesse di attivare/disattivare il bluetooth mostrando dapprima lo stato di questo (Bt acceso -> spegnilo, Bt spento -> accendilo). Si veda il contenuto del file /home/.config/openbox/scripts/bt;

#!/bin/bash

IsBtOn=$(cat /sys/bus/platform/devices/neo1973-pm-bt.0/power_on)

if [ "$IsBtOn" == "0" ];
then
cat << _EOF_
<openbox_pipe_menu>
<item label="Bt OFF>Turn ON">
<action name="Execute">
<execute>
attivabt
</execute>
</action>
</item>
</openbox_pipe_menu>
_EOF_

else

cat << _EOF_
<openbox_pipe_menu>
<item label="Bt ON>Turn OFF">
<action name="Execute">
<execute>
spegnibt
</execute>
</action>
</item>
</openbox_pipe_menu>
_EOF_
fi

Non credo sia utile esprimere il contenuto dei file attivabt, spegnibt (in /bin), poichè quanto necessario è presente nel wiki di openmoko.

p4.png

p5.png

p6.png

Un approccio molto similare sarebbe realizzabile per il wifi, per la tastiera (apri/chiudi se essa è già chiusa/aperta) A ciò seguirà una seconda fase per realizzare qualcosa del genere.
Inoltre l'utilizzo del pannello è evitabile poichè la gestione delle finestre può avvenire dal menu stesso! Per cui il menu potrebbe diventare un "launcher" rapidissimo, unico e dinamico...

p8.png

Si è mostrata la possibilità di gestire i processi in esecuzione mediante il menu. Il pipemenu in questione è scaricabile qui. Si faccia riferimento al menu.xml per capire come inserire menu dinamici.

N.B. Non so se sia possibile, ma credo che con un pò di lavoro si possa creare un menu che mostri l'output di una scansione bt e permetta di mandare file ad altri dispositivi.

p7.png

wallpaper by roberlan