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) -cSet 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"
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, ingi.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:
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.
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