Linux i powiadomienia via Telegram – HOWTO

Czemu zdecydowałem się na wysyłanie powiadomień via Telegram? Kiedyś wysyłałem SMSy z powiadomieniami, nawet zrobiłem skrypt do wygodnej wysyłki SMSów z CLI. Czasy trochę się zmieniły, telefony zostały zastąpione smartfonami. Po co płacić za SMSy, kiedy można wysłać powiadomienie inaczej, w dodatku za darmo? Wybrałem powiadomienia wysyłane przez Telegram.

logo Telegram
Źródło: https://www.freepnglogos.com/images/telegram-logo-944.html

Oczywiście istnieją inne metody. Zawsze można było wysyłać maile, które są co prawda darmowe, ale z założenia miewają opóźnienia. No i niekoniecznie chcemy dostawać powiadomienie na telefonie o każdym mailu. Gdy rozpoznawałem temat obiecująco wyglądały natywne powiadomienia push na telefon, ale ich uruchomienie nie jest proste. I nie do końca są darmowe, jak widać.

Znajomi zachwalali Telegram i jego możliwości, jeśli chodzi o tworzenie botów. Nawet kiedyś podchodziłem do uruchomienia bota Telegram, ale wydało mi się to wtedy skomplikowane. I samo stworzenie bota, i sama interakcja. Czyli wysłanie komendy, by coś wykonał i odesłał wynik. Dodatkowo nie ma czegoś takiego jak prywatny bot, a uwierzytelnianie czy też sprawdzanie nadawcy trzeba robić samodzielnie. Przynajmniej tak wyczytałem w necie. Może jestem przewrażliwiony, ale za bardzo to wszystko pachniało mi RCE. No i w końcu stawianie bota, gdy zależy tylko na prostych powiadomieniach, to overkill.

Wczoraj odświeżyłem temat i… okazało się, że wysłanie powiadomienia przez Telegram jest proste. I w sumie nie potrzeba żadnych bibliotek, by wysłać powiadomienie – wystarczy tak naprawdę curl.

Przygotowanie wysyłki powiadomień przez Telegram

Aby wysyłać wiadomości, potrzebne są nam dwie rzeczy: TOKEN oraz CHATID.

  1. Korzystając z bota BotFather w Telegramie stwórz swojego bota[1] (/newbot)
  2. Zapisz otrzymany TOKEN (np. 1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12)
  3. Znajdź swojego bota, wpis /start
  4. Przejdź na https://api.telegram.org/bot<yourtoken>/getUpdates
    W naszym przypadku na https://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/getUpdates
  5. Znajdź ciąg „id” dla „from” (np. „id”:723456789). Wartość jest szukanym CHATID.

Wysyłka powiadomień przez Telegram

Najprostszym wariantem wysłania powiadomienia jest wywołanie curl w postaci

curl "https://api.telegram.org/botTOKEN/sendMessage?chat_id=CHATID&parse_mode=Markdown&text=WIADOMOŚĆ"

Czyli na przykład, dla powyższych danych uzyskanych podczas konfiguracji

curl "https://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/sendMessage?chat_id=723456789&parse_mode=Markdown&text=to jest test śćżń ĄŁĘĆ https://zakr.es/"

Po wydaniu tego polecenia powinniśmy otrzymać na w kliencie Telegram telefonie wiadomość. Dodatkowo z klikalnym linkiem.

Nieco bardziej eleganckie, użyteczne i tylko odrobinę bardziej skomplikowane jest wysyłanie przy pomocy Pythona i biblioteki requests. Zostało ono opisane opisane we wpisie How to create a telegram bot and send messages with Python, który był bezpośrednią inspiracją tego wpisu. Znajdziecie tam również dokładną, ilustrowaną instrukcję konfiguracji bota. A o samych botach Telegram może będzie innym razem.

[1] Owszem, miało być bez bota. Ale się nie da – bot musi być. Nie musi obsługiwać żadnych komend ani wdawać się w interakcje, ale ten twór jest tak naprawdę telegramowym botem.

Bieganie 2020 – podsumowanie

Jak wyglądała aktywność fizyczna, czyli jazda na rowerze i bieganie w 2020? Pora na podsumowanie mojego biegania w smutnym 2020, jeszcze smutniejszym grudniu. Smutna prywata, więc pominę. Ale ten wpis może być jedynym grudniowym. Pojawia się, bo szkic leżał od dawna, jako kontynuacja zeszłorocznych statystyk.

Bieganie

Zacząłem dość ambitnie, bo biegałem już na początku roku. Odrobiłem przerwę zimową, zaczęły się postępy i… pojawiła się pandemia i koronawirus. Może nie było silnych przesłanek do zaprzestania biegania, ale jakoś tak mi się załączyło niewychodzenie z domu, że i nie biegałem. Wyszedłem z założenia, że ostatecznie te dwa tygodnie, góra miesiąc można się poświęcić, prawda?[1] Ostatni bieg przed pandemią miałem pierwszego marca.

Jak wyglądała pandemia i walka z nią wszyscy wiemy, miałem o tym notkę. Wróciłem więc do biegania. Początek był straszny. Izolacja to nie tylko przerwa od biegania, to tygodnie siedzenia w domu, praktycznie bez ruchu. Oczywiście robiłem jakieś statyczne ćwiczenia, ale to nędzna namiastka. Ogólnie skończyło się tak, że znacznie gorsza forma, niż po przerwie zimowej. W pierwszych biegach musiałem skrócić dystans do 4 km. Pierwszy z nich był 9 maja. Z tego co pamiętam w chuście. Skończyłem zziajany i wykończony, i nie chusta była temu winna…

Potem było lepiej. Nie tylko szybko wróciłem do zeszłorocznej formy i dystansu 5 km, ale poczułem niedosyt. Zacząłem zwiększać dystans. Najpierw było to dodatkowe 100-200 metrów, potem lekko zmodyfikowałem trasę (chciałem kończyć w innym miejscu) i zrobiło się dodatkowe 600-700 metrów. Z perspektywą na dalsze wydłużenie.

Na wydłużenie nie trzeba było długo czekać. Skoro może być równe 6 km, to czemu nie? Tak więc sierpień to już biegi po 6 km, zamiast zeszłorocznych 5 km. I tak zostało – obecnie mój standardowy dystans to 6 km.

Trochę z tej okazji, a troche z okazji września kupiłem – wspomniane tu – buty do biegania z lepszą, nieco bardziej terenową podeszwą. Początek dramatyczny, bo mnie obtarły. Mój błąd, wziąłem krótkie skarpetki, zsunęły się, a but „niezmiękczony”. Ale to jednorazowy wypadek i bardzo mi się podobają.

Statystyka: 39 biegów, 20,75h w ruchu, 215 km. Lekki regres, ale jak mówiłem to słaby rok był, co na bieganie też się przełożyło. Ostatni bieg na początku listopada.

Rower

O ile bieganie w 2020 nie ucierpiało, to jazda na rowerze ucierpiała bardzo. Rower służył mi głównie za środek transportu do pracy. Z racji pandemii pracowałem głównie z domu. Ilość odwiedzin w biurze można policzyć na palcach jednej ręki. I raczej byłem autem, bo i przegonić je trzeba od czasu do czasu, i czasem jakieś drobiazgi zabierałem z biura. Czyli na rowerze nie jeździłem.

Potem nieco się to zmieniło, bo najmłodsza córka poszła do przedszkola. Blisko domu, ale Nextbike był za darmo i fajnie skracał czas dojazdu do przedszkola. Powrót już odbywał się pieszo. Z kronikarskiego obowiązku: 6,75h w ruchu, 30 przejazdów, 71 km.

[1] Och, jakże to naiwne myślenie było, patrząc z perspektywy.

LXDE, laptop, jasność i głośność – HOWTO

Jest taka rzecz w laptopach z Linuksem, która często nie działa zaraz po instalacji. Przynajmniej nie na środowiskach korzystających z Openbox, np. LXDE. Chodzi o sterowanie jasnością ekranu oraz głośnością dźwięku, czyli klawisze multimedialne.

Nie pamiętam, czy coś się ostatnio zmieniło, czy zawsze tak było, tylko miałem skonfigurowane, ale ostatnio konfigurowałem laptopa z LXDE i jak wszystko działało, tak sterowanie głośnością i jasnością ekranu – nie. Wydaje mi się, że kiedyś obsługa tzw. klawiszy multimedialnych była robiona przez ACPI i skrypty (zob. linki na końcu wpisu), ale teraz można prościej.

W obu przypadkach wykorzystywany będzie plik ~/.config/openbox/lxde-rc.xml.

Jasność

Na początek kontrola jasności. W przypadku karty intela, bo taką miałem, kontrola jasności odbywa się z wykorzystaniem programu xbacklight, który musiałem doinstalować. Rozwiązanie powinno działać także dla innych kart. Dodatkowo musiałem utworzyć plik /etc/X11/xorg.conf.d/20-intel.conf o następującej zawartości:

Section "Device"
    Identifier "Intel Graphics"
    Driver "intel"
    Option "Backlight" "intel_backlight"
EndSection

W pliku XML zaś dodałem:

<keybind key="XF86MonBrightnessDown">
  <action name="Execute">
    <command>xbacklight -5</command>
    <startupnotify>
      <enabled>yes</enabled>
      <name>Decrease screen brightness</name>
    </startupnotify>
  </action>
</keybind>
<keybind key="XF86MonBrightnessUp">
  <action name="Execute">
    <command>xbacklight +5</command>
    <startupnotify>
       <enabled>yes</enabled>
       <name>Increase screen brightness</name>
    </startupnotify>
  </action>
</keybind>

Głośność

Trzeba oczywiście mieć zainstalowane programy, które będziemy wykorzystywać – w przypadku instalacji pełnego środowiska LXDE i Debiana 10 wszystko już było zainstalowane. Natomiast w pliku konfiguracyjnym XML wystarczy dodać:

  <keybind key="XF86AudioRaiseVolume">
    <action name="Execute">
      <execute>pactl set-sink-volume 0 +10%</execute>
    </action>
  </keybind>
  <keybind key="XF86AudioLowerVolume">
    <action name="Execute">
      <execute>pactl set-sink-volume 0 -10%</execute>
    </action>
  </keybind>
  <keybind key="XF86AudioMute">
    <action name="Execute">
      <execute>pactl set-sink-mute 0 toggle</execute>
    </action>
  </keybind>

Istnieją warianty wykorzystujące inne polecania pamixer czy amixer (zob. linki).

Oczywiście w ten sposób można zmieniać zachowanie dowolnych skrótów i wykorzystywać dowolne klawisze, nie tylko te wymienione. Pełna lista w źródłach (zob. linki)

Linki:

UPDATE: Skoro już konfigurujemy klawisze multimedialne, warto też pod Print Screen dodać robienie screenshotów. Podobno jest domyślnie, nie potwierdzam, ale może „zasługa” unstable.

    <keybind key="Print">
      <action name="Execute">
        <command>gnome-screenshot -i</command>
      </action>
    </keybind>