Bluetooth klávesnice, automatické připojení

Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » čtv 30. led 2020 15:22:29

V RPiShopu jsem k Raspberry Pi3+ (LibreElec) koupil mini bezdrátovou bluetooth klávesnici s touchpadem. Funguje perfektně, ale když se z nějakého důvodu ztratí spojení (vypnutí nebo usnutí klávesnice, restart systému, přenesení klávesnice z dosahu spojení apod.), klávesnice se po obnově potřebných podmínek sama nepřipojí. Nedokázal jsem najít způsob jak automatické znovupřipojení zajistit - prostě je to jako s otvírákem zavřeným v plechovce 😉
Netvrdím, že to nejde, jen nevím jak. Takto to znamená, že je nezbytné mít u RPi ještě myš nebo něco takového.
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » čtv 30. led 2020 15:45:37

Ahoj, můžeš prosím napsat co máš přesně za klávesnici a postup jak ji připojuješ?
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » čtv 30. led 2020 16:17:33

Výrobce Pimoroni, typ JP118
https://rpishop.cz/klavesnice-a-mysi/50 ... cerna.html

Klávesnici připojuji takto: Doplňky - LibreELEC Configuration - Bluetooth - vyberu spárovanou klávesnici a zvolím Připojit. Na klávesnici musím stisknout Fn+C, aby blikala kontrolka bluetooth.

Tuším, že musím přidat skript, který to zajistí. Před chvíli jsem našel tohle:
https://forum.libreelec.tv/thread/4780- ... reconnect/

Myslíš, že to pomůže. Nerad bych systém znovu obnovoval po zaseknutí. Přece jen to chvíli trvá.
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » čtv 30. led 2020 22:31:23

až se klávesnice odpojí, zkus zajet do shellu a dát:

Kód: Vybrat vše

bluetoothctl devices
tam bys měl vidět svojí klávesnici, pokud ji tam nevidíš dej klávesnici "párovat" a dej

Kód: Vybrat vše

bluetoothctl scan on
jakmile se klávesnice objeví dej CTRL+C

Označ a zkopíruj si adresu tvé klávesnice ve formátu xx:xx:xx:xx:xx:xx

Zkus dát:

Kód: Vybrat vše

bluetoothctl connect xx:xx:xx:xx:xx:xx
Pokud se klávesnice spáruje jsme na půl cesty k úspěchu. Stačí pak už jen naskriptovat službu, která se bude v případě odpojené klávesnice snažit jednou za daný časový interval snažit klávesnici připojit. Dej vědět jak jsi dopadl s připojováním.
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » čtv 30. led 2020 22:55:12

Dik za cenné rady. Ráno odjíždíme na víkend na Modravu na běžky. Vrátím se k tomu v pondělí dopoledne a dám vědět
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » čtv 30. led 2020 23:00:32

Sportu zdar! :)
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » pát 31. led 2020 7:59:24

Ještě chvilku váháme a přemýšlíme co si na sebe navléknout - 👙
Mezitím jsem to vyzkoušel a když na klávesnici aktivuji bluetooth vyhledávání (či jak se tomu říká), připojí se:

TV:~ # bluetoothctl devices
Device 20:20:00:0F:C4:3A Bluetooth 3.0 Keyboard

Klávesnice jen zapnutá:

TV:~ # bluetoothctl connect 20:20:00:0F:C4:3A
Attempting to connect to 20:20:00:0F:C4:3A
Failed to connect: org.bluez.Error.Failed

Po Ctrl+C na klávesnici:

TV:~ # bluetoothctl connect 20:20:00:0F:C4:3A
Attempting to connect to 20:20:00:0F:C4:3A
[CHG] Device 20:20:00:0F:C4:3A Connected: yes
[CHG] Device 20:20:00:0F:C4:3A Paired: yes
Connection successful
TV:~ #

Opravdu téměř successful 😀 Chybí to jen zautomatizovat ...

Zatím dík. Pokračování v neděli večer nebo v pondělí dopoledne 😎
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » pát 31. led 2020 8:26:35

Super :)
Ještě poprosím o výpis s připojenou a odpojenou klávesnicí

Kód: Vybrat vše

bluetoothctl info
Pokud to klapne, tak ho můžeme použít jako testovací podmínku - jestli je klávesnice připojená a následně pak můžeme volat požadavky na párování pouze v případě, když bude klávesnice odpojená. Skript bych udělal to jako službu v systemd.
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » pon 03. úno 2020 9:22:57

LibreELEC (official): 9.2.0 (RPi2.arm)

Po zapnutí RPi:
TV:~ # bluetoothctl info
Missing device address argument

Klávesnice nemá aktivováno "připojení":
TV:~ # bluetoothctl connect 20:20:00:0F:C4:3A
Attempting to connect to 20:20:00:0F:C4:3A
Failed to connect: org.bluez.Error.Failed

Po aktivaci "připojení" (Fn+C):
TV:~ # bluetoothctl connect 20:20:00:0F:C4:3A
Attempting to connect to 20:20:00:0F:C4:3A
[CHG] Device 20:20:00:0F:C4:3A Connected: yes
[CHG] Device 20:20:00:0F:C4:3A Paired: yes
Connection successful

TV:~ # bluetoothctl info
Device 20:20:00:0F:C4:3A (public)
Name: Bluetooth 3.0 Keyboard
Alias: Bluetooth 3.0 Keyboard
Class: 0x00000540
Icon: input-keyboard
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Service Discovery Serve.. (00001000-0000-1000-8000-00805f9b34fb)
UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
Modalias: usb:v04E8p7021d011B

Asi po 600 vteřinách neaktivity se klávesnice odpojí (kontroloval jsem to jen občas při práci a mám pocit, že po stisku jakékoli klávesy se počítá čas od nuly):
TV:~ # bluetoothctl info
Missing device address argument
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » pon 03. úno 2020 14:56:53

super :)

Udělal bych to tedy následovně, do /home/pi/bt.sh bych napsal toto:

Kód: Vybrat vše

TEST=`bluetoothctl info | wc -l`

if [ $TEST -eq 1 ]; then
	exit 0
fi
bluetoothctl connect 20:20:00:0F:C4:3A
do /etc/systemd/system/bt.service

Kód: Vybrat vše

[Unit]
Description=BT

[Service]
Environment="LANG=cs_CZ.UTF-8"
WorkingDirectory=/home/pi/
ExecStart=/bin/sh /home/pi/bt.sh
RestartSec=1s
KillMode=process
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
sudo systemctl enable bt.service
sudo systemctl start bt.service

Psal jsem to z patra bez vyzkoušení bluetoothctl info | wc -l musí vracet při nefunkčním stavu 1 - jinak je třeba upravit podmínku ve skriptu. Taky mám předpoklad, že v systému neexistuje služba co se jmenuje bt. Vyzkoušej, poreferuj.
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » pon 03. úno 2020 19:53:11

Zatím dík za snahu, V Raspbainau jsem to nějak zvládnul, ale chci použít Libreelec, kde mi běží Tvheadend server s DVBT-S USB adaptérem. Na jednom stroji funguje současně i TVheadend client zcela bez problémů. Systém mi připadá pro laické uživatele docela srozumitelný. Je tu ale (skoro) všechno jinak a nedaří se mi kontrolu připojení klávesnice zprovoznit.
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » pon 03. úno 2020 23:08:56

Když napíšeš na čem konkrétně jsi se zasekl, tak se můžeme zkusit posunout dále. Možná tam budou jiné binárky starající se o bluetooth. Je to linux ... dá se všechno :)
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » úte 04. úno 2020 16:34:09

Moc toho o skriptování (a linuxu vůbec) nevím, tak se nesměj.

V LibreELEC jsem to zkoušel takto:
V adresáři /storage/.config jsem vytvořil soubor autostart.sh s následujícím obsahem:

#!/bin/bash
(
TEST=`bluetoothctl info | wc -l`

if [ $TEST -eq 1 ]; then
exit 0
fi
bluetoothctl connect 20:20:00:0F:C4:3A
) &

a nastavil jako spustitelný: chmod a+x /storage/.config/autostart.sh

zkoušel jsem ho spustit ručně:
TV:~/.config # ls -l autostart.sh
-rwxr-xr-x 1 root root 136 Feb 4 16:10 autostart.sh
TV:~/.config # autostart.sh
-sh: autostart.sh: not found
TV:~/.config #

Na to jsem krátký 😮

Když ale zadám do příkazové řádky bluetoothctl connect 20:20:00:0F:C4:3A, klávesnice se připojí
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » úte 04. úno 2020 17:48:00

V pořádku. To, co se stane s tvým skriptem je, že se jednou spustí a přestane jet. Musel by se tam udělat cyklus ... což taky není problém. Ale nejdřív bych to zkusil přes systemd, přijde mi to čistější. LibreElec je vanilla linux, a tak tam některé komponenty nejsou - třeba "sh".

Postupoval bych následovně:

Kód: Vybrat vše

sudo su
cat <<EOF > /storage/bt.sh 
#!/bin/bash
TEST=\`bluetoothctl info | wc -l\`

if [ \$TEST -ne 1 ]; then
	exit 0
fi
bluetoothctl connect 20:20:00:0F:C4:3A
EOF
chmod +x /storage/bt.sh
cat <<EOF  > /etc/systemd/system/bt.service
[Unit]
Description=BT

[Service]
Environment="LANG=cs_CZ.UTF-8"
WorkingDirectory=/storage/
ExecStart=/bin/bash /storage/bt.sh
RestartSec=1s
KillMode=process
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
EOF
systemctl enable bt.service
systemctl start bt.service
Pokud by to někde neprošlo, tak napiš co to vrátilo. Případně se dá zacyklit it ten skript, který se tam snažíš dát jako autostart, to se mi ale moc nelíbí...

Kód: Vybrat vše

#!/bin/bash
(
while true; do
TEST=`bluetoothctl info | wc -l`
if [ $TEST -eq 1 ]; then
	bluetoothctl connect 20:20:00:0F:C4:3A
fi
done
) &
Naposledy upravil(a) PetrSmetana dne stř 05. úno 2020 21:05:32, celkem upraveno 1 x.
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » stř 05. úno 2020 8:10:59

Nějak mi to vzdoruje:

Možná je potíž chybějící komponentně sh.

TV:~ # /storage/.config/bt.sh
-sh: /storage/.config/bt.sh: not found
TV:~ # cat /storage/.config/bt.sh
#!/bin/bash
TEST=\`bluetoothctl info | wc -l\`

if [ \$TEST -ne 1 ]; then
exit 0
fi
bluetoothctl connect 20:20:00:0F:C4:3A
EOF
chmod +x /storage/.config/bt.sh
cat <<EOF > /etc/systemd/system/bt.service
[Unit]
[Unit]
Description=BT

[Service]
Environment="LANG=cs_CZ.UTF-8"
WorkingDirectory=/storage/
ExecStart=/bin/bash /storage/.config/bt.sh
RestartSec=1s
KillMode=process
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
EOF
systemctl enable bt.service
systemctl start bt.service
TV:~ #


(Alespoň pro mě) je problém LibreELEC je v tom, že je read only. Pokud bych něco změnil třeba v /etc lze předpokládat, že při nějaké aktualizaci by se změny přepsaly.
Zapisovat je možné jen do adresáře /storage. Zřejmě (jen) do jeho podadresáře .config lze patrně vložit potřebné změny konfigurace (už jsem využil např. pro Sambu). Adresář /storage/.config/ má další podadresáře (např. system.d, sysctl.d), do kterých se přidávají konfigurační soubory dalších služeb. V každém podadresáři je soubor README s popisem.

Z některých README moudrý nejsem a netuším jak to nastavit. Viz např. obsah README v podadresáři sysctl.d:

*****************
Name
sysctl.d — Configure kernel parameters at boot
Synopsis
/etc/sysctl.d/*.conf
/run/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
Description
At boot, systemd-sysctl.service(8) reads configuration files from the above directories to configure sysctl(8) kernel parameters.
Configuration Format
The configuration files contain a list of variable assignments, separated by newlines. Empty lines and lines whose first non-whitespace character is # or ; are ignored.
Note that both / and . are accepted as label separators within sysctl variable names. "kernel.domainname=foo" and "kernel/domainname=foo" hence are entirely equivalent.
Each configuration file shall be named in the style of program.conf. Files in /etc/ override files with the same name in /usr/lib/ and /run/. Files in /run/ override files with the same name in /usr/lib/. Packages should install their configuration files in /usr/lib/. Files in /etc/ are reserved for the local administrator, who may use this logic to override the configuration files installed by vendor packages. All configuration files are sorted by their filename in alphabetical order, regardless in which of the directories they reside, to guarantee that a specific configuration file takes precedence over another file with an alphabetically later name, if both files contain the same variable setting.
If the administrator wants to disable a configuration file supplied by the vendor, the recommended way is to place a symlink to /dev/null in /etc/sysctl.d/ bearing the same filename.
Example
Example 1. /etc/sysctl.d/domain-name.conf example:
# Set kernel YP domain name
kernel.domainname=example.com
See Also
systemd(1), systemd-sysctl.service(8), systemd-delta(1), sysctl(8), sysctl.conf(5)

******************


Systém sám do podadresářů (/storage/.cache, storage/.kodi /storage/logfiles apod.) zapisuje všechno potřebné (databázové a dočasné soubory, logy apod.). Tedy tak to alespoň chápu.
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » stř 05. úno 2020 10:03:07

ok, popojedem :)

Skript zkus spustit přes ./storage/bt.sh (s tečkou na začátku) případně přes příkaz bash /storage/bt.sh

Chtěl bych vidět výstup příkazu mount, výstup ls -al /etc/systemd/system/ a případně i cat /etc/systemd/system/bt.service (ať máme jistotu, že to tam je)

Pak bych chtěl ještě vidět systemctl list-unit-files a systemctl status bt.service
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » stř 05. úno 2020 15:59:03

TV:~ # cd /storage
TV:~ # ./storage/bt.sh
-sh: ./storage/bt.sh: not found
TV:~ # bash /storage/bt.sh
/storage/bt.sh: line 2: info: not found
wc: invalid option -- '`'
BusyBox v1.31.0 (2019-11-23 02:13:09 CET) multi-call binary.

Usage: wc [-cmlwL] [FILE]...

Count lines, words, and bytes for each FILE (or stdin)

-c Count bytes
-m Count characters
-l Count newlines
-w Count words
-L Print longest line length
: not found.sh: line 3:
/storage/bt.sh: line 29: syntax error: unexpected end of file (expecting "then")
TV:~ #
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » stř 05. úno 2020 16:47:43

Nevidím to jinak, než že si budu muset na nějaké malině rozjet libreelec a vyzkoušet to, u tohoto přepinkávání bychom zestárli :) Náhodou remote přístup na ssh na tu tvojí malinu poskytnout nemůžeš?
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
petrk
Příspěvky: 13
Registrován: čtv 30. led 2020 15:03:46
Dal poděkování: 1 poděkování

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od petrk » stř 05. úno 2020 19:05:25

Na svém routeru jsem směrování na malinu nastavil, ale vypadá to, že je někde špatně přesměrovaná veřejná IP adresa. V posledních dnech se mění IP adresování zařízení v našem segmentu sítě a zřejmě se vloudila chybička. Teď už na dohledu nikoho nechytím. Zprovozním to zítra dopoledne. Pošlu ti SZ.
Zatím dík
Uživatelský avatar
PetrSmetana
Příspěvky: 310
Registrován: pon 22. črc 2019 9:06:45
Bydliště: Mnich
Dal poděkování: 28 poděkování
Dostal poděkování: 60 poděkování
Kontaktovat uživatele:

Re: Bluetooth klávesnice, automatické připojení

Příspěvek od PetrSmetana » stř 05. úno 2020 20:41:04

Zrovna nedavno jsem si užil něco podobného u nás se starnetem. Mj. většina poskytovatelů nemá zpětný nat - na svou veřejnou IP přistoupit nemůžeš. Zkus koukout na https://www.whatismyip.com/, třeba se tam dostanu. Tohle je případně můj klíč - AAAAB3NzaC1yc2EAAAABJQAAAIEAxiYniQzC8Pldeyscv2De3Ycy7oodGfnwvlsNPoWE47NvNd0oTKndT7USxFNzzDAimyTDDf+aoLzcQeFYnIjcz6InJm/FoNkKCPpWh4wemcY1YSS0O1sXPQswQlmazKcCMuUmIa3+vTjqrUvD1pKInjDyAT43CUkwdX4ISPRZ/lM= PS

Pokud to budeš vystavovat s heslem, tak ho určitě změň přes passwd.
Modré z nebe na počkání, zázraky do dvou dnů.
Odpovědět