vineri, 8 noiembrie 2019

Controlul vocal al desktop-ului prin Google Assistant

In ultima postare am prezentat cum puteti integra Google Assistant pe un desktop care ruleaza Ubuntu 18.04.

Cine doreste, poate gasi articolul aici.

Dupa instalare, Google Assistant-ul ii ofera computerului functionalitatea unei boxe inteligente Google Home, dar nu poate interactiona cu desktop-ul. Nu putem transmite comenzi in urma carora spre exemplu sa deschidem ferestre, sa dam log out sau login, etc.

Obtinem aceasta functionalitate prin integrarea unui software third party precum triggerCMD.
Acesta este un serviciu care ii va permite Google Assistant-ului sa interactioneze cu desktop-ul prin intermediul unei liste de comenzi. Practic, modul de functionare este urmatorul. Google Assistant-ul va prelua comanda pe care o dam vocal si o va transmite catre triggerCMD. Daca triggerCMD recunoaste comanda primita va executa mai departe o comanda in bash.

Pentru a folosi triggerCMD este necesar sa faceti un cont aici.
Dupa logare, in meniul din stanga dati click pe ‘Instructions’.
Aici veti gasi un link de download pentru kitul de instalare.

Tot aici veti gasi si un ‘token’ pe care il veti folosi pentru autentificarea desktop-ului pe care instalam agentul. Acesta este cerut prima data cand deschidem agentul dupa instalare.

triggerCMD vine atat in varianta free cat si in varianta platita. In varianta free exista o limita de o comanda ce poate sa fie executata intr-un interval de un minut. In varianta platita, nu exista aceasta limitare.

Deschideti ‘Startup Applications’ si configurati triggerCMD sa porneasca la startup.

Lista de comenzi poate fi editata atat in mod grafic din GUI cat si text.

Pentru editarea din GUI, dati click pe tray icon in taskbar (dreapta sus) si selectati ‘GUI command editor

Pentru a adauga o comanda apasati butonul ‘Add Command’ aflat in meniul din stanga.

Definirea unei comenzi:

In poza de mai sus:
Trigger este numele comenzii pe care o vom rula. E doar o descriere care ne ajuta sa identificam ulterior comanda in lista.
Command este comanda care va fi trimisa sistemului pentru a fi executata in bash.
Ground ne permite sa alegem intre a rula comanda in foreground sau in background. Alegeti ‘foreground’, e mai simplu.
Voice este comanda pe care o va transmite Google Assistant-ul catre triggerCMD.
Voice Reply poate sa fie lasat necompletat. Daca totusi dorim ca triggerCMD sa ne raspunda cu un mesaj dupa executarea comenzii, putem completa replica aici.
Allow Parameters este setat implicit pe valoarea ‘false’. Daca alegem ‘true’ acest lucru ne permite sa legam comanda executata de mai multe variabile pe care le invocam in aceeasi comanda. Pentru simplitate poate fi lasat pe ‘false’.

In modul de editare text al listei, comanda de mai sus arata astfel:

Pentru ca intreg setup-ul sa fie functional, este necesar sa legam agentul triggerCMD de Google Assistant.
Dam click aici pentru a face acest lucru.

Pentru a controla interfata grafica este necesar sa instalam xdotools.
Deschidem un terminal si executam comanda:

$ sudo apt-get install xdotool xautomation wmctrl

Mai multe informatii despre cum se utilizeaza xdotools gasiti accesand manualul comenzii.

Acum avem intregul setup pregatit.
Voi folosi comanda prezenta in imaginea de mai sus pentru a exemplifica modul de functionare.
Vom transmite comanda catre Googla Assistant care la randul sau o va trimite agentului care in final o executa local, spunand urmatoarele:

“Hey Google, ask triggerCMD to run calculator”

“calculator” este un alias vocal pentru comanda “gnome-calculator” care deschide calculatorul din terminal.

Dupa executare, triggerCMD va raspunde cu:

“I was always good at math”


Comanda pentru ‘Login’ este:

xdotool type <parola voastra>; xdotool key Return

Comanda pentru ‘Log out’ este:

xdotool key super+l

Pe masura ce integrati mai multe device-uri in setup, puteti intocmi o diagrama pentru a vedea fluxurile de relationare intre acestea. :)

Geva de genul…

Daca nu vreti sa ii spuneti mereu lui Google sa ii spuna lui triggerCMD ce sa faca, solutia este urmatoarea.

In aplicatia Google Home accesati Settings > More settings > Assistant > Routines.

Aici definiti o rutina care sa apeleze o comanda data catre triggerCMD. Astfel, cand apelati rutina nu mai este necesar sa invocati triggerCMD.

Exemplu:




Niciun comentariu :

Trimiteți un comentariu