Tak więc Internet jest naprawdę niesamowitą rzeczą! Po wielu badaniach i analizowaniu wielu linków na forum udało mi się lepiej zrozumieć problem, dowiedzieć się, jaki program był za niego odpowiedzialny, i wreszcie na dobre wyłączyć to zachowanie. Myślałem, że zanotuję swoje kroki, na wypadek, gdyby inni ludzie napotkali ten sam problem.
Krok 1. Monitoruj system, aby wiedzieć, czy / kiedy włącza się podświetlenie klawiatury
Pierwszą rzeczą jest wiedzieć, że aktualny stan podświetlenia klawiatury można sprawdzić, czytając plik /sys/devices/platform/dell-laptop/leds/dell\:\:kbd_backlight/brightness
. Dlatego chcielibyśmy być powiadamiani o wszelkich zmianach w tym pliku, a najlepiej o tym, jaki proces wywołał zmianę.
Można to zrobić za pomocą fanotify . Użyłem przykładowego programu, który znajduje się na stronie man i dodałem kilka modyfikacji *, aby móc monitorować zmiany w pliku jasności. Okazuje się, że proces odpowiedzialny za modyfikację był /usr/lib/upower/upowerd
procesem demonicznym dla UPower .
Krok 2. Dowiedz się, dlaczego UPower włącza podświetlenie (błąd)
To była najbardziej rozmyta część śledztwa i wciąż nie mogę powiedzieć, dlaczego tak się dzieje. Znalazłem osobę z bardzo podobnym problemem, ale bez rozwiązania, więc zacząłem sprawdzać, czy mogę całkowicie wyłączyć UPower (i jakie byłyby konsekwencje), kiedy znalazłem ten link . Okazuje się, że UPower ma plik konfiguracyjny! Tak lepiej
Krok 3. Zatrzymaj UPower przed włączeniem podświetlenia klawiatury
Wreszcie, redagował wspomniany plik konfiguracyjny znajdujący się /etc/dbus-1/system.d/org.freedesktop.UPower.conf
i zmienił <allow>
się <deny>
w następnym wierszu:
<allow send_destination="org.freedesktop.UPower"
send_interface="org.freedesktop.UPower.KbdBacklight"/>
Następnie zrestartowałem dbus za pomocą sudo service dbus restart
(użyj systemctl restart dbus.service
na Ubuntu 16.04 i nowszych) i przystąpiłem do blokowania ekranu, aby przetestować wynik i ... Zadziałało !! Cóż, trochę. Ekran logowania się nie pojawiał, więc nie mogłem się zalogować i musiałem wymusić ponowne uruchomienie. Ale potem wszystko działało świetnie!
I to wszystko! Nadal jestem ciekawy, jaki byłby to właściwy sposób. Jeśli wiesz, zostaw komentarz, proszę!
* Na przykład program przykładowy został skonfigurowany tylko do monitorowania FAN_OPEN_PERM
i FAN_CLOSE_WRITE
zdarzeń, ale w tym przypadku było to FAN_MODIFY
zdarzenie.