KDE Connect — trochę nowych możliwości
22.11.2016 | aktual.: 09.05.2017 22:36
Patrząc na nieużywaną przeze mnie funkcję bloga postanowiłem, że odświeżę nieco stary wpis jednego z użytkowników dobrych programów Nie tylko OSX umożliwia na kontrolę pracy Smartphone- KDE Connect i uzupełnię o elementy programowania w BASH'u z wykorzystaniem Kdialog. Przedstawię także, co od tamtego czasu zmieniło się w KDE Connect.
Komponowanie publikacji nie należy do moich mocnych stron, ale postaram się wszystko ładnie i przejrzyście przedstawić. Jednocześnie jest to mój pierwszy wpis na blogu Dobrych Programów, więc proszę o wyrozumiałość. :‑)
Krótko, czym właściwie jest KDE Connect ?
Jest to aplikacja, która ma za zadanie zintegrować nasze urządzenia mobilne z desktopem opartym o system Linux ze środowiskiem graficznym KDE. Aplikacja jest modularna tzn. zawiera wtyczki, które rozszerzają poszczególne funkcjonalności, możemy je dowolnie włączać i wyłączać. Standardowo dostępny jest klient integrujący się z KDE ( kdeconnectd ) jak i wersja konsolowa o nazwie kdeconnect-cli.
Bezpieczeństwo
Poprzednie wersje używały kluczy RSA do zabezpieczenia komunikacji klient-serwer. Od wersji 1.0 zmieniono to na szyfrowanie TLS ( Transport Layer Security ) Dla użytkownika oznacza to m. in. mniejsze ryzyko ataków "man-in-the-middle" jak i mniejsze drenowanie baterii. Dodano możliwość sprawdzania odcisku SHA1 certyfikatu klienta jak i urządzenia zdalnego (desktop) dzięki czemu żadne urządzenie w sieci LAN nam się nie podszyje.
Nieco nowych funkcji
Otrzymywanie powiadomień z komputera na smartfonie
( wtyczka "Wysyłaj powiadomienia" )
Funkcja "odwrotna" do poprzednio dostępnej. Powiadomienia z KDE teraz mogą nam się wyświetlać w obszarze powiadomień na smartfonie. Oczywiście, aby funkcja działała musimy mieć najnowszą aplikację mobilną KDE Connect, a także przyznać jej odpowiednie uprawnienia.
Moduł posiada okienko konfiguracyjne w którym możemy zdefiniować filtr od jakich aplikacji powiadomienia mają być przesyłane, priorytety powiadomień jak również parę innych opcji.
Zdalne wykonywanie poleceń w konsoli
( wtyczka "Wykonywanie poleceń" )
Jedna z moich ulubionych wtyczek, a zarazem najbardziej funkcjonalna, ponieważ pozwala na uruchamianie poleceń jak i całych skryptów shell systemu Linux.
Czasami w aplikacji mobilnej polecenia nie pojawiają się, ale wystarczy odznaczyć i zaznaczyć wtyczkę w telefonie i działa.
Uruchamianie dzwonka na telefonie
( wtyczka "Dzwoń z mojego telefonu" )
Funkcja może i starsza, lecz nieopisana na w. w. blogu. Nic innego jak wtyczka mająca za zadanie wyzwolić dźwięk w naszym smartfonie, aby umożliwić nam jego odnalezienie. To co odróżnia tą funkcję od "Znajdź telefon" w Menadżerze urządzeń Google to, że nie jest wymagane połączenie z internetem, a jedynie sieć lokalna WiFi, a także nieco wygodniejszy sposób użycia z poziomu powiadomień KDE Connect.
Odpowiadanie na SMS'y
( wtyczka "Integracja z telefonem" )
Jedna z ważniejszych nowości wprowadzonych w wersji 1.0. Zasada działania jest prosta: otrzymujemy SMS>na komputerze wyświetla się powiadomienie wraz z przyciskiem "Odpowiedz". Po kliknięciu pojawia się dodatkowe okienko, gdzie mamy możliwość odpowiedzenia na SMS'a.
Początkowo na Manjaro Linux 16.10 funkcja nie chciała działać. Problem rozwiązało zastąpienie jądra w wersji 4.4.33-1 wersją 4.7.10-1. ( potrzebna jest również najnowsza aplikacja mobilna KDE Connect )
Inne funkcje
Nie będę się rozpisywał na temat innych wtyczek. Z pozostałych warto wymienić jeszcze "Udostępniaj i otrzymuj". Pozwala na bezpośrednie udostępnianie adresów URL, tekstu i plików ze smartfona i otwieranie ich bezpośrednio na komputerze w domyślnych aplikacjach ustawionych w środowisku graficznym KDE.
Tandem BASH i Kdialog - odpowiadanie na SMS'y to za mało
Po wprowadzeniu możliwości odpowiedzenia na wiadomość tekstową bezpośrednio z obszaru powiadomień nasunęła mi się myśl, a co jeżeli to ja chcę zainicjować rozmowę, wysłać SMS do kogoś bezpośrednio używając komputera?
Szybko przystąpiłem do działania i pierwszej kolejności sprawdziłem klienta konsolowego "kdeconnect-cli" pod kątem wysyłania wiadomości tekstowych.
Dostrzegłem opcję:
--send-sms <message> Sends an SMS. Requires destination
Aby wysłać wiadomość bezpośrednio spod konsoli Linux wystarczą polecenia:
kdeconnect-cli -a
Wyświetli to nam nazwę urządzenia/urządzeń online wraz z identyfikatorem: (muszą być wcześniej sparowane w KDE Connect)
- Mi5 Pro: f23xxxxxxxxxxxxx (reachable) 1 device found
Następnie mając już identyfikator urządzenia możemy wpisać:
kdeconnect-cli -d <identyfikator urządzenia> --destination <numer telefonu> --send-sms "<treść SMS'a>"
ENTER i gotowe!
Mając już podstawowe informacje na temat obsługi konsolowego klienta kdeconnect-cli możemy przystąpić do oskryptowania w BASH i skorzystania z dobrodziejstw kdialog.
Zaczynamy
Wypadałoby najpierw wykryć urządzenia będące online i podstawić pod zmienną "urzadzenie".
#!/bin/bash urzadzenie=$(kdeconnect-cli -a --id-only 2>&1);
Wyrażenie na końcu "2>&1" przekierowuje nam standardowe wyjście błędów do standardowego wyjścia i w tym przypadku jest konieczne.
Dalej musimy określić, co ma się dziać w przypadku: braku urządzenia online, wykrycia 1 dostępnego urządzenia, wykrycia dwóch i więcej urządzeń. W tym celu przydatne będą sprawdzanie warunku "if", dokonanie wyboru spośród wzorców "case" i w zasadzie tyle.
if [ "$urzadzenie" = "No devices found" ]; then kdialog --title "kconnect-cli" --msgbox "Nie wykryto urządzeń online!\nSparuj najpierw urządzenie w KDE Connect." else
Fragment ten sprawdza zmienną "$urządzenie", czy zawiera łańcuch tekstowy " No devices found", a następnie wyświetla w formie okienka stosowny komunikat. Wyrażenie "\n" przenosi tekst do następnej linijki.
Wybierz urządzenie...
Skryptujemy dalej:
if [ ${#urzadzenie} -gt 16 ]; then urzadzenie=$(kdialog --title "KDE Connect" --combobox "$(kdeconnect-cli -a) \n\nWybierz urządzenie:" $urzadzenie); case "$?" in 0) if [ ${#urzadzenie} -eq 0 ]; then kdialog --sorry "Nie wybrano żadnego urządzenia!"; exit 0; fi ;; 1) exit 0; ;; esac; fi
Wyrażenie "${#urzadzenie}" wylicza nam i wstawia ile znaków zawiera wartość zapamiętana pod zmienną "$urządznie". Wykorzystujemy tutaj fakt, że identyfikatory urządzeń w KDE Connect mają 16 znaków. Każde przekroczenie tej wartości oznacza, że musimy wywołać okienko pozwalające na wybór, więcej niż jednego urządzenia. "-gt" oznacza "większe niż".
Niżej tworzymy już okienko wyboru typu "combobox". "$(kdeconnect -a)" wypisuje nam w treści okienka, aktualnie wykryte urządzenia online - ich nazwy i identyfikatory. W tym momencie pod zmienną "$urzadzenie" znajdują się wszystkie wykryte identyfikatory (bez nazw). W momencie wybrania urządzenia z listy i po zatwierdzeniu, wybrany identyfikator trafia do zmiennej "$urzadzenie" jednocześnie ją nadpisując.
Poniżej sprawdzane jest, czy czasem niczego nie wybraliśmy, jeżeli tak się stało to skrypt jest zakończony komunikatem "Nie wybrano żadnego urządzenia!". Pod "1)" określamy, co skrypt ma zrobić w momencie wybrania przycisku "Anuluj". W pozostałych przypadkach skrypt będzie się wykonywał dalej.
Do kogo?
W tym momencie można było rozwiązać problem na różne sposoby. Ja wybrałem utworzenie tablicy asocjacyjnej z osobami jako indeksy.
declare -A tnumery tnumery=( ["Mama"]=511000000 ["Osoba2"]=512000000 ["Osoba3"]=513000000 ["Osoba4"]=514000000 #i tak dalej ... - po numerach tel. znajduje się po 1 spacji! ); kto=$(kdialog --title "SMS - do kogo?" --combobox "Wybierz numer:" "${!tnumery[@]}" --default "Mama"); case "$?" in 1) exit 0; ;; esac;
Następny combobox ma określone wymiary, jako wartości do wyboru wypisane są indeksy tablicy asocjacyjnej poprzez wyrażenie "${!tnumery[@]}" i jako domyślna wartość jest na stałe ustawiona "Mama". Wybrana wartość jest zapamiętywana pod zmienną "$kto".
Treść wiadomości
Tutaj wystarczy na szczęście zwykłe pole typu "textinputbox". I zapamiętanie wpisanego tekstu pod zmienną "$sms".
sms=$(kdialog --title "SMS" --textinputbox "Wpisz treść wiadomości do wysłania:"); case "$?" in 1) exit 0; ;; esac;
Potwierdzenie (opcjonalnie) i wysłanie SMS
kdialog --continue-label "Wyślij" --warningcontinuecancel "Wysłać SMS do $kto ("${tnumery[$kto]}") o treści:\n\n\"$sms\""; case "$?" in 0) kdeconnect-cli -d $urzadzenie --destination ${tnumery[$kto]} --send-sms "$sms" && notify-send -t 4000 -i kdeconnect-cli "Wysłano SMS'a!"; ;; 1) exit 0; ;; esac; fi
Ostatnie już okienko z przyciskami "Wyślij" i "Anuluj" (typu "Warning"). Na tym etapie łączymy wszystko w całość. Zmienna "$kto" wypisze wybraną osobę, "${tnumery[$kto]}" zwróci nam numer tej osoby. "notify-send" spełnia rolę powiadomienia wyświetlanego 4 sekundy o wysłaniu SMS'a.
Podsumowanie
Jeżeli ktoś dotrwał do końca wpisu to bardzo dziękuję :) W nagrodę cały skrypt: [KDE-SMS]
Wystarczy wkleić do edytora, zapisać do pliku SH i nadać prawa do uruchomienia w konsoli Linux ( chmod +x nazwaskryptu.sh )
PS: Nie zapomnijcie podmienić numerów tel. w tablicy!
EDIT: Kdialog od teraz nie wspiera opcji "-‑geometry" - skrypt został poprawiony.