Tips en Trucs 2022

RGB toetsenbord

Onlangs kocht ik een Logitech G213 Prodigy Gaming Keyboard, ik zocht namelijk een toetsenbord met lichtgevende toetsen. Eenmaal thuis gekomen moest ik vaststellen dat je het toetsenbord enkel kon instellen via een programma onder Windows. Daarenboven was de standaard verlichting op zijn zachtst uitgedrukt, nogal heftig.

Al vlug vond ik op het internet enkele Linux programma's om het toetsenbord in te stellen. Een opdracht voor de terminal en een grafisch programma, gebaseerd op dezelfde terminal opdracht. Laten we dus beginnen met de terminal opdracht. Het G213Colors script is geschreven in Python 3 en gebruikt twee Python bibliotheken. Python 3 is op de meeste recente Linux distributies standaard geïnstalleerd. De eerste bibliotheek zorgt voor USB ondersteuning in Python 3, het toetsenbord is namelijk aangesloten via USB.

dany@pindabook:~> sudo pip3 install pyusb
[sudo] wachtwoord voor root: 
Collecting pyusb
  Downloading pyusb-1.2.1-py3-none-any.whl (58 kB)
     |████████████████████████████████| 58 kB 1.4 MB/s 
Installing collected packages: pyusb
Successfully installed pyusb-1.2.1

En de tweede genereert willekeurige kleuren.

dany@pindabook:~> sudo pip3 install randomcolor
Collecting randomcolor
  Downloading randomcolor-0.4.4.6-py3-none-any.whl (4.8 kB)
Installing collected packages: randomcolor
Successfully installed randomcolor-0.4.4.6

Daarna downloaden we het script van de GitHub pagina de ontwikkelaar:

dany@pindabook:~> wget https://raw.githubusercontent.com/SebiTimeWaster/G213Colors/master/G213Colors.py
--2022-09-24 19:07:01--  https://raw.githubusercontent.com/SebiTimeWaster/G213Colors/master/G213Colors.py
Herleiden van raw.githubusercontent.com (raw.githubusercontent.com)... 2606:50c0:8003::154, 2606:50c0:8000::154, 2606:50c0:8001::154, ...
Verbinding maken met raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8003::154|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 6545 (6,4K) [text/plain]
Wordt opgeslagen als: ‘G213Colors.py’

G213Colors.py                     100%[============================================================>]   6,39K  --.-KB/s    in 0s      

2022-09-24 19:07:02 (24,0 MB/s) - '‘G213Colors.py’' opgeslagen [6545/6545]

En verplaatsen het naar de map met uitvoerbare bestanden:

dany@pindabook:~> sudo mv G213Colors.py /usr/local/bin/

De ingebouwde helpfunctie roepen we op met de volgende opdracht:

dany@pindabook:~> sudo python3 /usr/local/bin/G213Colors.py
[sudo] wachtwoord voor root: 
G213Colors - Changes the key colors on a Logitech G213 Prodigy Gaming Keyboard

Options:
-c                         Set the standard color (white)
-c                  Set a custom color
-c   ...   Set custom colors for all 5 segments
-b   

Zolang de gewone gebruiker voor dit USB apparaat (met idVendor: "046d" en idProduct "c336") geen rechten heeft, moet je het script als root uitvoeren. De twee volgende opdrachten zorgen eerst voor een rode (ff0000) toetsverlichting en daarna voor een zeer zwakke witte (222222) verlichting, enkel zichtbaar in het donker.

dany@pindabook:~> sudo python3 /usr/local/bin/G213Colors.py -c ff0000
dany@pindabook:~> sudo python3 /usr/local/bin/G213Colors.py -c 222222

Wil je bij het opstarten van de computer en/of bij het aansluiten van het toetsenbord een vooraf ingestelde kleur gebruiken, voeg dan een hardware regel toe waarmee je het script uitvoert bij het herkennen van het toetsenbord.

dany@pindabook:~> echo 'ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c336", RUN+="/usr/bin/python3 /usr/local/bin/G213Colors.py -c 222222"' | sudo tee /etc/udev/rules.d/80-g213colors.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c336", RUN+="/usr/bin/python3 /usr/local/bin/G213Colors.py -c 222222"

Grafisch programma

Een andere ontwikkelaar heeft op basis van het terminal script een grafisch programma (eveneens in Python 3) geschreven. Dit nieuwe programma bevat alles, dus ook het voorgaande G213Colors script. M.a.w. we verwijderen eerst de regel om het script op te starten bij het herkennen van het toetsenbord en het voorgaande script.

dany@pindabook:~> sudo rm /etc/udev/rules.d/80-g213colors.rules
dany@pindabook:~> sudo rm /usr/local/bin/G213Colors.py

Daarna downloaden we de volledige broncode van het grafische programma van de GitHub pagina van de ontwikkelaar.

dany@pindabook:~> wget https://github.com/JeroenED/G213Colors/archive/refs/heads/master.zip
--2022-09-24 19:35:14--  https://github.com/JeroenED/G213Colors/archive/refs/heads/master.zip
Herleiden van github.com (github.com)... 140.82.121.4
Verbinding maken met github.com (github.com)|140.82.121.4|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: https://codeload.github.com/JeroenED/G213Colors/zip/refs/heads/master [volgen...]
--2022-09-24 19:35:15--  https://codeload.github.com/JeroenED/G213Colors/zip/refs/heads/master
Herleiden van codeload.github.com (codeload.github.com)... 140.82.121.10
Verbinding maken met codeload.github.com (codeload.github.com)|140.82.121.10|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: niet-opgegeven [application/zip]
Wordt opgeslagen als: ‘master.zip’

master.zip                            [ <=>                                                         ] 125,73K  --.-KB/s    in 0,08s   

2022-09-24 19:35:15 (1,60 MB/s) - '‘master.zip’' opgeslagen [128749]

Waarna we de broncode uitpakken.

dany@pindabook:~> unzip master.zip 
Archive:  master.zip
07342eb905bd8e0ec1885fe3034cec58ed22b244
   creating: G213Colors-master/
  inflating: G213Colors-master/.gitignore  
  inflating: G213Colors-master/G213Colors.desktop  
  inflating: G213Colors-master/G213Colors.py  
...
  inflating: G213Colors-master/pcaps/g203/static.txt.txt  
  inflating: G213Colors-master/pcaps/game_key.pcap  
  inflating: G213Colors-master/pcaps/wave.pcap  
  inflating: G213Colors-master/pcaps/wave2.pcap

We openen de uitgepakte map met de broncode.

dany@pindabook:~> cd G213Colors-master/

En installeren de software met make (is in de meeste distributies standaard geïnstalleerd). Wie de uitgevoerde opdrachten op voorhand wil inkijken, kan deze vinden in het bestand makefile.

dany@pindabook:~/G213Colors-master> sudo make install
[sudo] wachtwoord voor root: 
cp G213Colors.py /usr/bin/G213Colors.py
cp main.py /usr/bin/g213colors-gui
cp default.conf /etc/G213Colors.conf
chmod +x /usr/bin/G213Colors.py
chmod +x /usr/bin/g213colors-gui
cp icons/G213Colors-16.png /usr/share/icons/hicolor/16x16/apps/g213colors.png
cp icons/G213Colors-24.png /usr/share/icons/hicolor/24x24/apps/g213colors.png
cp icons/G213Colors-32.png /usr/share/icons/hicolor/32x32/apps/g213colors.png
cp icons/G213Colors-48.png /usr/share/icons/hicolor/48x48/apps/g213colors.png
cp icons/G213Colors-128.png /usr/share/icons/hicolor/128x128/apps/g213colors.png
cp icons/G213Colors-192.png /usr/share/icons/hicolor/192x192/apps/g213colors.png
cp G213Colors.desktop /usr/share/applications/g213colors.desktop
cp be.jeroened.pkexec.g213colors.policy /usr/share/polkit-1/actions/
gtk-update-icon-cache -q /usr/share/icons/hicolor/
#### probe /sbin/openrc if exisits add boot/default  runner else.. 
cp g213colors.service /etc/systemd/system/g213colors.service
systemctl daemon-reload

Voor we het grafisch programma kunnen starten, moeten we in openSUSE Leap 15.4 in het script een aanpassing uitvoeren om duidelijk aan te geven dat het een Python 3 programma is en geen Python 2. Dit kan met elke teksteditor die je met root rechten hebt gestart.

dany@pindabook:~/G213Colors-master> sudo nano /usr/bin/g213colors-gui

We passen de eerste regel van het script /usr/bin/g213colors-gui aan van:

#!/usr/bin/env python

Naar:

#!/usr/bin/env python3

Daarna kan je het grafisch programmma in de terminal starten met de volgende opdracht. Daarbij moet je eerst het root wachtwoord opgeven. Pas daarna verschijnt in openSUSE 15.4 de volgende foutmelding (enkel zichtbaar in de terminal):

dany@pindabook:~> pkexec g213colors-gui
Traceback (most recent call last):
  File "/usr/bin/g213colors-gui", line 8, in 
    gi.require_version('Gtk', '3.0')
  File "/usr/lib64/python3.6/site-packages/gi/__init__.py", line 126, in require_version
    raise ValueError('Namespace %s not available' % namespace)
ValueError: Namespace Gtk not available

Deze foutmelding is te wijten aan het ontbreken van een software bibliotheek waardoor het programma geen toegang heeft tot de grafische GTK 3 omgeving. Dit los je op door de volgende software te installeren: python3-gi, python3-gi-cairo en gir1.2-gtk-3.0. OpenSUSE Leap 15.4 heeft deze echtergebundeld in het softwarepakket gtk3-devel dat je installeert met:

dany@pindabook:~> sudo zypper install gtk3-devel
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 2 aanbevolen pakketten zijn automatisch geselecteerd:
  bison-lang libpng16-compat-devel

De volgende 96 NIEUWE pakketten zullen worden geïnstalleerd:
  atk-devel at-spi2-atk-devel at-spi2-core-devel bison bison-lang cairo-devel compositeproto-devel damageproto-devel dbus-1-devel
  fixesproto-devel fontconfig-devel freetype2-devel fribidi-devel gdk-pixbuf-devel gettext-its-gtk4 gettext-tools glib2-devel
  glibc-devel graphite2-devel gtk3-devel harfbuzz-devel icu.691-devel inputproto-devel kbproto-devel libblkid-devel libbrotli-devel
  libbz2-devel libcairo-script-interpreter2 libdatrie-devel libepoxy-devel libexpat-devel libffi-devel libglvnd-devel
  libharfbuzz-gobject0 libicu69 libicu69-ledata libjpeg62 libjpeg62-devel libmount-devel libpcre16-0 libpcrecpp0 libpcreposix0
  libpixman-1-0-devel libpng16-compat-devel libpng16-devel libselinux-devel libsepol-devel libstdc++6-devel-gcc7 libstdc++-devel
  libthai-devel libtiff-devel libuuid-devel libX11-devel libXau-devel libxcb-devel libxcb-screensaver0 libxcb-xf86dri0 libxcb-xtest0
  libxcb-xvmc0 libXcomposite-devel libxcrypt-devel libXcursor-devel libXdamage-devel libXext-devel libXfixes-devel libXft-devel
  libXi-devel libXinerama-devel libxkbcommon-devel libXrandr-devel libXrender-devel libXtst-devel linux-glibc-devel m4 Mesa-KHR-devel
  Mesa-libEGL-devel Mesa-libGL-devel pango-devel pcre-devel pthread-stubs-devel python3-gobject-Gdk randrproto-devel recordproto-devel
  renderproto-devel typelib-1_0-Atk-1_0 typelib-1_0-Atspi-2_0 typelib-1_0-GdkPixbuf-2_0 typelib-1_0-GdkPixdata-2_0 typelib-1_0-Gtk-3_0
  typelib-1_0-HarfBuzz-0_0 typelib-1_0-Pango-1_0 wayland-devel xextproto-devel xineramaproto-devel xproto-devel zlib-devel

96 nieuwe te installeren pakketten.
Totale downloadgrootte: 32,6 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 165,8 MiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket compositeproto-devel-0.4.2-1.22.x86_64 wordt opgehaald                                   (1/96),  15,2 KiB ( 24,0 KiB uitgepakt)
Ophalen: compositeproto-devel-0.4.2-1.22.x86_64.rpm ...............................................................[gereed (2,5 KiB/s)]
pakket damageproto-devel-1.2.1-1.22.x86_64 wordt opgehaald                                      (2/96),  13,4 KiB ( 14,2 KiB uitgepakt)
Ophalen: damageproto-devel-1.2.1-1.22.x86_64.rpm ..............................................................................[gereed]
...
pakket pango-devel-1.50.4-150400.1.5.x86_64 wordt opgehaald                                    (95/96), 176,9 KiB (  1,5 MiB uitgepakt)
Ophalen: pango-devel-1.50.4-150400.1.5.x86_64.rpm .............................................................................[gereed]
pakket gtk3-devel-3.24.34-150400.3.3.1.x86_64 wordt opgehaald                                  (96/96),   2,0 MiB ( 16,6 MiB uitgepakt)
Ophalen: gtk3-devel-3.24.34-150400.3.3.1.x86_64.rpm ...............................................................[gereed (2,0 MiB/s)]

Controleren op conflicten tussen bestanden: ...................................................................................[gereed]
( 1/96) Installeren van: compositeproto-devel-0.4.2-1.22.x86_64 ...............................................................[gereed]
( 2/96) Installeren van: damageproto-devel-1.2.1-1.22.x86_64 ..................................................................[gereed]
( 3/96) Installeren van: inputproto-devel-2.3.2-1.22.x86_64 ...................................................................[gereed]
...
(94/96) Installeren van: gdk-pixbuf-devel-2.42.9-150400.5.6.1.x86_64 ..........................................................[gereed]
(95/96) Installeren van: pango-devel-1.50.4-150400.1.5.x86_64 .................................................................[gereed]
(96/96) Installeren van: gtk3-devel-3.24.34-150400.3.3.1.x86_64 ...............................................................[gereed]

Daarna start het programma foutloos vanaf de terminal en via de Programmastarter > Hulpmiddelen > G213 Colors (A gui to change the key colors on a Logitech G213 Prodigy Gaming Keyboard). Enkele schermen:

G213 Colors G213 Colors G213 Colors G213 Colors G213 Colors

Om na het herstarten van de computer terug de ingestelde toetbordverlichting te gebruiken, voer je de volgende opdracht uit:

dany@pindabook:~> sudo g213colors-gui -t
[sudo] wachtwoord voor root: 
G213
Connected G213
11ff0c3a01011a5fb40200000000000000000000

Send data to G213
bmRequestType, bmRequest, wValue[productName], wIndex, binascii.unhexlify(data)
33 9 529 1 b'\x11\xff\x0c:\x01\x01\x1a_\xb4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
11ff0c3a0201e01b240200000000000000000000

Send data to G213
bmRequestType, bmRequest, wValue[productName], wIndex, binascii.unhexlify(data)
33 9 529 1 b'\x11\xff\x0c:\x02\x01\xe0\x1b$\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
11ff0c3a030133d17a0200000000000000000000

Send data to G213
bmRequestType, bmRequest, wValue[productName], wIndex, binascii.unhexlify(data)
33 9 529 1 b'\x11\xff\x0c:\x03\x013\xd1z\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
11ff0c3a0401c061cb0200000000000000000000

Send data to G213
bmRequestType, bmRequest, wValue[productName], wIndex, binascii.unhexlify(data)
33 9 529 1 b'\x11\xff\x0c:\x04\x01\xc0a\xcb\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
11ff0c3a0501b5835a0200000000000000000000

Send data to G213
bmRequestType, bmRequest, wValue[productName], wIndex, binascii.unhexlify(data)
33 9 529 1 b'\x11\xff\x0c:\x05\x01\xb5\x83Z\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Disconnected G213

Dit gaat echter vlug vervelen, met de volgende opdracht automatiseer je dit bij elke computerstart:

dany@pindabook:~> sudo systemctl enable g213colors.service
Created symlink /etc/systemd/system/multi-user.target.wants/g213colors.service → /etc/systemd/system/g213colors.service.
Created symlink /etc/systemd/system/suspend.target.wants/g213colors.service → /etc/systemd/system/g213colors.service.
Created symlink /etc/systemd/system/hibernate.target.wants/g213colors.service → /etc/systemd/system/g213colors.service.
Created symlink /etc/systemd/system/hybrid-sleep.target.wants/g213colors.service → /etc/systemd/system/g213colors.service.

G213Colors volledig van de computer verwijderen

Ook voor het verwijderen van G213Colors hebben we de map met broncode nodig. Sluit indien nodig het G213Colors programma af. Open de map met broncode en voer de make opdracht uit om G213Colors van de computer te verwijderen:

dany@pindabook:~> cd G213Colors-master/
dany@pindabook:~/G213Colors-master> sudo make uninstall
[sudo] wachtwoord voor root: 
rm /usr/bin/G213Colors.py
rm /usr/bin/g213colors-gui
rm /etc/G213Colors.conf
rm /usr/share/icons/hicolor/16x16/apps/g213colors.png
rm /usr/share/icons/hicolor/24x24/apps/g213colors.png
rm /usr/share/icons/hicolor/32x32/apps/g213colors.png
rm /usr/share/icons/hicolor/48x48/apps/g213colors.png
rm /usr/share/icons/hicolor/128x128/apps/g213colors.png
rm /usr/share/icons/hicolor/192x192/apps/g213colors.png
rm /usr/share/applications/g213colors.desktop
rm /usr/share/polkit-1/actions/be.jeroened.pkexec.g213colors.policy
gtk-update-icon-cache -q /usr/share/icons/hicolor/
rm /etc/systemd/system/g213colors.service
systemctl daemon-reload

Daarna kan je na het verlaten van de bronmap, deze verwijderen:

dany@pindabook:~/G213Colors-master> cd
dany@pindabook:~> rm -r G213Colors-master/
dany@pindabook:~> rm master.zip

Daarna kunnen we alle voor G213Colors afhankelijke softwarepakketten verwijderen:

dany@pindabook:~> sudo zypper remove -u gtk3-devel
[sudo] wachtwoord voor root: 
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 96 pakketten zullen worden VERWIJDERD:
  atk-devel at-spi2-atk-devel at-spi2-core-devel bison bison-lang cairo-devel compositeproto-devel damageproto-devel dbus-1-devel
  fixesproto-devel fontconfig-devel freetype2-devel fribidi-devel gdk-pixbuf-devel gettext-its-gtk4 gettext-tools glib2-devel
  glibc-devel graphite2-devel gtk3-devel harfbuzz-devel icu.691-devel inputproto-devel kbproto-devel libblkid-devel libbrotli-devel
  libbz2-devel libcairo-script-interpreter2 libdatrie-devel libepoxy-devel libexpat-devel libffi-devel libglvnd-devel
  libharfbuzz-gobject0 libicu69 libicu69-ledata libjpeg62 libjpeg62-devel libmount-devel libpcre16-0 libpcrecpp0 libpcreposix0
  libpixman-1-0-devel libpng16-compat-devel libpng16-devel libselinux-devel libsepol-devel libstdc++6-devel-gcc7 libstdc++-devel
  libthai-devel libtiff-devel libuuid-devel libX11-devel libXau-devel libxcb-devel libxcb-screensaver0 libxcb-xf86dri0 libxcb-xtest0
  libxcb-xvmc0 libXcomposite-devel libxcrypt-devel libXcursor-devel libXdamage-devel libXext-devel libXfixes-devel libXft-devel
  libXi-devel libXinerama-devel libxkbcommon-devel libXrandr-devel libXrender-devel libXtst-devel linux-glibc-devel m4 Mesa-KHR-devel
  Mesa-libEGL-devel Mesa-libGL-devel pango-devel pcre-devel pthread-stubs-devel python3-gobject-Gdk randrproto-devel recordproto-devel
  renderproto-devel typelib-1_0-Atk-1_0 typelib-1_0-Atspi-2_0 typelib-1_0-GdkPixbuf-2_0 typelib-1_0-GdkPixdata-2_0 typelib-1_0-Gtk-3_0
  typelib-1_0-HarfBuzz-0_0 typelib-1_0-Pango-1_0 wayland-devel xextproto-devel xineramaproto-devel xproto-devel zlib-devel

96 te verwijderen pakketten.
Na de bewerking zal 165,8 MiB worden vrijgemaakt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
( 1/96) Verwijderen van bison-lang-3.0.4-3.3.1.noarch .........................................................................[gereed]
( 2/96) Verwijderen van gtk3-devel-3.24.34-150400.3.3.1.x86_64 ................................................................[gereed]
( 3/96) Verwijderen van bison-3.0.4-3.3.1.x86_64 ..............................................................................[gereed]
...
(94/96) Verwijderen van glibc-devel-2.31-150300.41.1.x86_64 ...................................................................[gereed]
(95/96) Verwijderen van linux-glibc-devel-5.14-150400.4.44.x86_64 .............................................................[gereed]
(96/96) Verwijderen van libxcrypt-devel-4.4.15-150300.4.4.3.x86_64 ............................................................[gereed]
Er zijn actieve programma's die nog steeds bestanden en bibliotheken gebruiken die verwijderd of bijgewerkt zijn door recente opwaarderingen. Ze zouden opnieuw gestart moeten worden om voordeel te hebben van de laatste vormen van bijwerken. Voer 'zypper ps -s' uit om een lijst met deze programma's te maken.

Ook de benodigde Python 3 bibliotheken kunnen we verwijderen:

dany@pindabook:~> sudo pip3 uninstall pyusb randomcolor
[sudo] wachtwoord voor root: 
Found existing installation: pyusb 1.2.1
Uninstalling pyusb-1.2.1:
  Would remove:
    /usr/lib/python3.6/site-packages/pyusb-1.2.1.dist-info/*
    /usr/lib/python3.6/site-packages/usb/*
Proceed (y/n)? y
  Successfully uninstalled pyusb-1.2.1
Found existing installation: randomcolor 0.4.4.6
Uninstalling randomcolor-0.4.4.6:
  Would remove:
    /usr/lib/python3.6/site-packages/randomcolor-0.4.4.6.dist-info/*
    /usr/lib/python3.6/site-packages/randomcolor/*
Proceed (y/n)? y
  Successfully uninstalled randomcolor-0.4.4.6