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.

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 dodatkowych klawiszy 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, 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>

LXDE -> LXQt – podejście pierwsze

Od dłuższego czasu (notka wskazuje, że już sześć lat, jak ten czas leci…) moim domyślnym – i w zasadzie jedynym używanym – środowiskiem na desktopie (ang.: desktop environment) jest LXDE. Nie udało mi się oczywiście całkiem zrezygnować z zależności od KDE. Z aplikacji przychodzących z KDE ostały się: edytor kate (jednak z GUI – najwygodniejszy, obecnie myślę o Atom, ale kobyła…); konsole (w szczególnych przypadkach typu konieczność wyboru charsetu, bo lxterminal ogólnie działa bardzo fajnie) oraz… kdiff3, który jest wygodny. Ale nie o tym ma być notka.

Środowisko LXDE

Środowisko LXDE Źródło: http://lxde.org/lxde_desktop/

Swego czasu w sieci było sporo zachwytów nad LXQt i trochę bolało mnie, że nie ma paczek w Debianie, żeby się pobawić. Potem zauważyłem, że paczki pojawiły się w unstable, ale nie było już jakoś ani czasu, ani ochoty. Ostatnio sobie przypomniałem o ich istnieniu, zainstalowałem pakiety, przelogowałem się i… trochę rozczarowanie. Może za dużo czytałem zachwalania i miałem za wysokie oczekiwania, ale przyznam, że LXQt nie powaliło mnie.

Pierwsze co mi się rzuciło w oczy, to brzydkie dekoracje okien i brak większego wyboru w tym zakresie. OK, może kwestia przyzwyczajenia. Do tego doszły braki widgetów (np. wyloguj) oraz zmiany działania tych, które były wcześniej używane. Przykładowo wykres użycia CPU czy RAM zawiera teraz więcej informacji, na jednym wykresie. W przypadku CPU pokazuje nie po prostu zużycie, ale z rozbiciem na nice, system, user. RAM podobnie – used, buffers… Po co to komu na desktopie, tak naprawdę? Na pierwszy rzut oka jest mniej czytelnie, choć informacji więcej. I jest to ogólny trend. Widget do pokazywania temperatury korzysta domyślnie ze wszystkich możliwych źródeł, zarówno tych działających, jak i nie działających. I żeby było „normalnie”, to trzeba wyłączyć niechciane (i niedziałające).

Podgląd pulpitów jakiś taki brzydszy. Znaczy wybór pulpitów, bo podglądu po prostu nie ma. QTerminal nadal nie ma możliwości wyboru kodowania. Wbudowane blokowanie terminala (czyli screensaver) odwołuje się do nieistniejącej binarki, chociaż to akurat obchodzę przy pomocy xscreensavera, tak samo miałem zrobione w LXDE.

Żeby nie było, że tylko wady: widać, że poświęcono trochę pracy na łatwiejsze (drag & drop) dodawanie programów do pasków. Pojawiło się jakby więcej opcji w wielu miejscach. Trochę mam skojarzenia z KDE 3.5 (tak jak je pamiętam), jeśli chodzi o możliwości konfiguracji. Wiele rzeczy daje się obejść, np. zamiast brakującego widgetu do wylogowania można użyć drugiego paska ze skrótami do aplikacji i tam przeciągnąć z menu odpowiednie programy. Zdecydowanie fajny jest menadżer nośników wymiennych – w LXDE nie korzystałem, nie wiem czy w ogóle był.

Drobiazgów typu zużycie RAM nie mierzyłem – w porównaniu z dowolną przeglądarką WWW to są orzeszki teraz… Ogólnie środowisko działa szybko i sprawnie. Mam je na domowym desktopie od jakichś dwóch tygodni i zdecydowanie daje się używać.

Środowisko LXQt

Środowisko LXQt. Źródło: http://lxqt.org/screenshots/dark/

Podsumowując: wygląd jest sprawą dyskusyjną. Moim zdanie LXQt nie wnosi nic specjalnego w stosunku do LXDE, poza wyglądem, więc jeśli ktoś korzysta z LXDE, to raczej nie będzie zachwycony zmianą. Faktem jest, że LXQt działa i daje się używać, więc gdyby LXDE zniknęło, to mam wybranego następcę. Zmiana filozofii z „jest prosto i działa” na „można więcej skonfigurować” – co kto lubi. Mi LXDE pasowało, bo korzystałem z praktycznie niemodyfikowanej konfiguracji domyślnej i wielką zaletą przesiadki na LXDE był właśnie fakt, że praktycznie wszystko od kopa działa i nie trzeba rzeźbić. Przy przejściu z LXDE na LXQt trochę trzeba się pobawić z konfiguracjami.

Póki co zostawiam LXQt, żeby pozbyć się przyzwyczajeń, ale nie wykluczam, że za parę tygodni wrócę do LXDE. Tym bardziej, że właśnie z LXDE korzystam na innych desktopach. – paczki LXQt w Debianie są dopiero w testing i wyżej.

PolicyKit w Debianie.

Wczoraj po krótkiej rozmowie na kanale IRC zostałem przekonany do przejścia na unstable pełną gębą (plus odrobinka testing…). Do tej pory korzystałem ze stable plus backporty plus testing plus unstable, gdzie ok. połowy pakietów było ze stable. Upgrade przebiegł pomyślnie i w sumie dość bezproblemowo: przestała działać karta wifi (kwestia zdjęcia blacklist odpowiednich modułów), odinstalowało fglrx (nie patrzyłem jeszcze czemu, grafika Intela działała od kopa) i… znowu system przestał pozwalać na wyłączenie, wstrzymanie i hibernację.

Piszę znowu, bo temat jest znany i stary, pamiętam odkąd używam Debiana z LXDE, że był z tym problem. Czyli chyba od Lenny’ego. Na pewno było w Squeeze. Do tej pory pomagało ubicie procesu  /usr/lib/policykit-1/polkitd, albo, trwalej, usunięcie pakietu policykit-1. Mało eleganckie, ale proste i skuteczne. Zresztą na żadnym z moich desktopów nie potrzebowałem takich wynalazków.

Problem z PolicyKit jest taki, że może i jest to fajne, ale wygląda na skomplikowane, a dokumentacja jest żenująca – wystarczy spojrzeć na opis PolicyKit na wiki Debina. No i co najgorsze, niespecjalnie są przykłady. Podobnie jest w wielu innych miejscach, a nawet jeśli coś jest, to często są to stare i nieaktualne dane. Ostatecznie pomógł ten wpis nt. PolicyKit i opis PolicyKit na wiki Arch. Po kolei, czyli najpierw wyświetlanie dostępnych w systemie akcji – polecenie pkaction. Jego wynik to u mnie:

com.ubuntu.pkexec.gparted
org.blueman.bluez.config
org.blueman.dhcp.client
org.blueman.hal.manager
org.blueman.network.setup
org.freedesktop.consolekit.system.restart
org.freedesktop.consolekit.system.restart-multiple-users
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.stop-multiple-users
org.freedesktop.policykit.exec
org.freedesktop.policykit.lockdown
org.freedesktop.udisks.cancel-job-others
org.freedesktop.udisks.change
org.freedesktop.udisks.change-system-internal
org.freedesktop.udisks.drive-ata-smart-refresh
org.freedesktop.udisks.drive-ata-smart-retrieve-historical-data
org.freedesktop.udisks.drive-ata-smart-selftest
org.freedesktop.udisks.drive-detach
org.freedesktop.udisks.drive-eject
org.freedesktop.udisks.drive-set-spindown
org.freedesktop.udisks.filesystem-check
org.freedesktop.udisks.filesystem-check-system-internal
org.freedesktop.udisks.filesystem-lsof
org.freedesktop.udisks.filesystem-lsof-system-internal
org.freedesktop.udisks.filesystem-mount
org.freedesktop.udisks.filesystem-mount-system-internal
org.freedesktop.udisks.filesystem-unmount-others
org.freedesktop.udisks.inhibit-polling
org.freedesktop.udisks.linux-lvm2
org.freedesktop.udisks.linux-md
org.freedesktop.udisks.luks-lock-others
org.freedesktop.udisks.luks-unlock
org.freedesktop.upower.hibernate
org.freedesktop.upower.qos.cancel-request
org.freedesktop.upower.qos.request-latency
org.freedesktop.upower.qos.request-latency-persistent
org.freedesktop.upower.qos.set-minimum-latency
org.freedesktop.upower.suspend
org.kde.kcontrol.kcmremotewidgets.save

Jak widać uprawnienia odpowiedzialne za suspend i hibernację są w jednej grupie (czy też raczej gałęzi drzewa), a restartowanie i zatrzymywanie systemu – w innej. Ostatecznie utworzyłem plik /etc/polkit-1/localauthority/50-local.d/10-my-power-policy.pkla o zawartości:

[Let rozie shutdown]
Identity=unix-user:rozie
Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*
ResultActive=yes

Jak widać z wildcardem, bo – jak wspomniałem – niespecjalnie zależy mi na ograniczaniu samego siebie. Ale można podać konkretne uprawnienia, po średniku. Podobnie, można przyznać uprawnienia grupie użytkowników, a nie tylko pojedynczemu. Wówczas linia odpowiedzialna za przyznanie uprawnień dla usera rozie i dodatkowo grupy będzie miała postać:

Identity=unix-user:rozie;unix-group:jakaśgrupa

Na wiki Debiana jest pokazany screenshot policykit-gnome, ale jakoś nie udało mi się na to natknąć, choć pakiet mam zainstalowany. Może Gnome only i dlatego na LXDE nie działa?

UPDATE: Skoro już o naprawianiu błędów po upgrade do unstable, to jeszcze jedna ważna rzecz, którą „zepsuł” upgrade – po odłączeniu zasilania dysk co chwilę zatrzymuje się i rozpędza. Czyli co kilkadziesiąt sekund spin down i spin up. Tradycyjne miejsca (hdparm, apmd itp.) okazały się niewinne, rozwiązaniem okazało się odinstalowanie upower dostarczającego upowerd, który wygląda na słabo konfigurowalny. dodanie wpisu w /etc/hdparm.conf:

/dev/sda {
        apm = 254
        apm_battery = 254
}


UPDATE2: We wpisie o policykit był błąd: nie ResultAny=yes a ResultActive=yes (poprawione we wpisie). Po jakimś czasie zauważyłem, że nie działa, ale zwaliłem winę na lxpolkit, który w międzyczasie pojawił się w systemie (uroki unstable). Po bliższym przyjrzeniu – j.w. Nie żebym wnikał, czym to się dokładnie różni.