Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

KDE Connect — trochę nowych możliwości

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 destinationAby wysłać wiadomość bezpośrednio spod konsoli Linux wystarczą polecenia:kdeconnect-cli -aWyś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 foundNastę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." elseFragment 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 --geometry 500x180 --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! 

linux oprogramowanie programowanie

Komentarze

0 nowych
Magnum 44   16 #1 22.11.2016 22:39

Super wpis :) Szkoda, że GNOME 3 nie ma podobnej funkcjonalności, chętnie bym przygarnął na Fedorce :)

Domker   6 #2 22.11.2016 22:51

@Magnum 44:
Dzięki :)
Niestety powstał tylko indicator-kdeconnect, który integruje KDE Connect z klasycznym GNOME.

  #3 23.11.2016 11:46

Mi5 Pro :)
Dobry wybór.

Farkas   10 #4 23.11.2016 12:05

Kurde, fajne, ale mi się wydaje czy trzeba sobie samemu dość podstawowe skrypty pisać? Czy może opisałeś tutaj to w celu pokazania jak to wygląda od kuchni?

flecht   6 #5 23.11.2016 12:23

@Farkas: Nie wiem, czy było zainteresowanie wysyłaniem nowych wiadomości z poziomu programu. Domker miał pomysł i wykorzystał funkcjonalność przygotowaną na potrzeby odpowiadania na wiadomości. Na moje, rozwiązanie wbudowane musiałoby zapewne brać numery z książki adresowej telefonu.

@Domker: Dzięki za info o nowych możliwościach — jak wrócę do domu to przetestuję.

Autor edytował komentarz w dniu: 23.11.2016 12:27
LeserGD   5 #6 23.11.2016 14:55

Domker: jak wyglada obsługa DualSIM? Powinno byc jeszcze okno wyboru karty z której wysyłamy.

Autor edytował komentarz w dniu: 23.11.2016 14:55
Domker   6 #7 23.11.2016 15:34

@LeserGD:
Klient kdeconnect-cli nie posiada takiej możliwości.
Sam mam dualSIM, wysyła z tej karty do której jest kontakt przypisany w telefonie lub tej która jest ustawiona jako domyślna dla wiadomości SMS.

@flecht:
Można też zrobić pośrednie rozwiązanie tzn. wczytanie kontaktów z pliku eksportu książki numerów w telefonie. (struktura jest łatwa do przetworzenia przez "sed".

Autor edytował komentarz w dniu: 23.11.2016 15:34
AlbatrosZippa   10 #8 23.11.2016 22:28

Widzę że od czasu ostatniego postu wiele się zmieniło w Connect. Ja nie miałem jakoś chęci i czasu, aby śledzić ten program. Najlepsze to że łapał powiadomienia aplikacji, która w normalnym trybie wymagała opcję premium.

  #9 24.11.2016 12:03

Dzięki za wpis. Bardzo dobry

Domker   6 #10 24.11.2016 12:30

@AlbatrosZippa:
W KDE Connect wiele funkcji wykonały osoby poniżej 18 roku życia, oczywiście mieli nad sobą developerów, którzy dbali o jakość kodu :)

  #11 24.11.2016 13:17

@Domker: Aplikacja na androida dostaje dostęp do kontaktów, może gdzieś udostępnia też dostęp do kontaktów?

Domker   6 #12 24.11.2016 16:32

@b (niezalogowany):
Dostęp do kontaktów jest na potrzeby powiadomień o połączeniach i odpowiadania na SMS. Aplikacja pobiera nazwę i numer kontaktu. Nie ma tylko dostępnego API/funkcji, aby wymusić pobranie kontaktów.

AlbatrosZippa   10 #13 24.11.2016 17:26

@Domker: Jednak brakuje mi dalej rozmów przez telefon za pomocą KDE Connect i wykorzystanie Orcy lub innego czytnika ekranowego żeby czytał powiadomienia

Domker   6 #14 24.11.2016 17:41

@AlbatrosZippa:
Tego drugiego (czytania powiadomień) bym nie chciał.
Aż strach pomyśleć, jak zostaniemy zasypani nadmierną ilością powiadomień, co by się działo - litania w wykonaniu syntezatora mowy :D

Odnośnie rozmów przez telefon to wystarczyłby jakiś switch, który uruchomi nam tryb głośnomówiący w telefonie i umożliwi odebranie połączenia.

dthlfwp   7 #15 24.11.2016 17:56

brakuje mi opcji połączenia się przez bluetooth low energy, tak muszę specjalnie włączać wifi w telefonie.

  #16 24.11.2016 19:09

Możesz też dodać opcję włączania komputera przez WOL :P

infoslaw   6 #17 25.11.2016 15:24

Dzięki za dobrą, interesującą dawkę informacji nt synchronizacji Androida z GUI KDE, nigdy specjalnie nie przykładałem uwagi do tego typu rozwiązania i jeżeli już to wykorzystywałem AirDroid. Szczególnie Twój skrypcik "very handy"!
Pozdrowienia, Sławek.

  #18 28.11.2016 14:42

@infoslaw: kde-connect nie jest ograniczony tylko do Plasmy.