Zprovoznění numpadu na Asus Zenbook UX362-FA

Autor: | 3. 4. 2021 | IT, Linux

Štítky: asus | linux | ultrabook | ux362fa

Asus u svých notebooků přišel ze zajímavou novinkou. To touchpadu integroval numerickou klávesnici. Pokud člověk pracuje často s čísly nebo v Blenderu, tak se tato vychytávka může hodit. Bohužel Asus odmítá poskytnout ovladače či zdrojový kód pro Linux. Takže komunita musela postupně přijít s vlastním řešením. Je to v tuto chvíli spíše workaroud než ovladače, ale je to je to už dobře použitelné.

Workaround spočívá v tom, že někdo šikovný odposlechnul komunikaci a pomocí příkazu dokáže zapnout a vypnout LED podsvícení numpadu na touchpadu. A někdo další napsal skript v Pythonu, který odposlechne na jaké pozici má člověk prst a podle toho detekuje číslo na numerické klávesnici. Na mém modelu ASUS UX362-FA jsem musel udělat drobnější úpravu ve zdrojovém kódu, ale mohu potvrdit, že je skript k dnešnímu dni funkční.

Edit 13.2.2023: Aktuálně využívám ovladače: https://github.com/mohamed-badaoui/ux433-touchpad-numpad . Další projekt, který se zabývá ovladači je https://github.com/asus-linux-drivers/asus-touchpad-numpad-driver. Tam jsem ovšem zatím nenašel verzi svého Numpadu, takže zatím nepoužívám.

Instalace potřebných balíčků

Prvním krokem instalace nástrojů pro posílání zpráv přes i2c sběrnici. Je dobré počítat s tím, že většina příkazů musí běžet s právy roota.

sudo aptitude install i2c-tools
sudo modprobe i2c-dev
sudo i2cdetect -l

Zkontroloval jsem, na kterém čísle sběrnice se nachází můj numpad.

sudo i2cdetect -l
i2c-3   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-10  i2c             AUX C/port C                            I2C adapter
i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-8   i2c             AUX A/port A                            I2C adapter
i2c-6   i2c             i915 gmbus misc                         I2C adapter
i2c-4   i2c             i915 gmbus dpb                          I2C adapter
i2c-2   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-0   smbus           SMBus I801 adapter at efa0              SMBus adapter
i2c-9   i2c             AUX B/port B                            I2C adapter
i2c-7   i2c             i915 gmbus dpd                          I2C adapter
i2c-5   i2c             i915 gmbus dpc                          I2C adapter

U mého modelu to je sběrnice číslo 2. Nyní je možné otestovat, zda funguje příkaz pro zapínání a vypínání LED podsvícení. Za parametrem -y uvádím číslo mojí sběrnice. Touchpad jsem měl vypnutý, nicméně zpozoroval jsem, že jsem se musel v některých případech inicializace touchpadu dotknout a pak příkaz spustit. Nevím jestli to bylo náhoda nebo pravidlo.

Zapnutí podsvícení:

sudo i2ctransfer -f -y 2 w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad

Vypnutí podscívcení:

sudo i2ctransfer -f -y 2 w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad

Když všechno fungoval, tak jsem nainstaloval poslední balíček pro python:

sudo pip3 install libevdev

Instalace skriptu

Skript vzniknul pro model ASUS UX433, nicméně funguje i pro model UX362-FA. Je umístěn na githubu: https://github.com/mohamed-badaoui/ux433-touchpad-numpad. Pokud bych měl touchpad na jiné sběrnici než 2, musel bych skript editovat, aby počítal s jiným číslem sběrnice. Na jiném počítači běžel touchpad na sběrnici číslo 9 (hledejte zařízení DesignWare a číslo za řetězcem i2c-), musel jsem skript ux433_touchpad_numpad.py editovat a nastavit řádky 8 a 9:

onCmd = "i2ctransfer -f -y 9 w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad"
offCmd = "i2ctransfer -f -y 9 w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x00 0xad"

Následně pak spustit instalaci:

chmod +x install.sh
./install.sh

Numpad je možné zapnout klávesou F8 a je to v tuto chvíli doporučený postup.

Dokumentace drobné úpravy pro model UX362FA

Pár hodin před psaním příspěvku jsem musel udělat drobnou úpravu ve skriptu. Před publikací už byla oprava zahrnuta v repozitáři. Nyní tedy jenom dokumentuji, pokud by se někdo setkal s podobným problémem.

Ve skritpu jsem musel změnit řádek 24 na:

if touchpad_detected == 0 and "Name=\"ELAN" in line and "Touchpad" in line:

Docházelo totiž ke špatné identifikaci mého touchpadu. Můj touchpad posílá data do zařízení /dev/input/event10. Lze to ověřit tak, že vypíšu obsah souboru a začnu se dotýkat touchpadu. Pokud se začnou zobrazovat nějaké znaky, tak jsem identifikoval správné zařízení:

sudo cat /dev/input/event10

Závěr

Skript má v tuto chvíli drobné chyby. Lze zapínat i tlačítkem na touchpadu/numpadu. Ale zlobí klávesa backspace – při stisku klávesy zůstane backspace přidržen a maže a maže.. Zároveň při přejetí do pravého rohu si můžete numpad omylem zapnout. Editací skriptu bude určitě možné tlačítko na touchpadu odpojit. Každopádně skript je čerstvý a jenom dnes jsem zaevidoval 2 nové verze. Takže je možné, že některé chyby budou ještě odstraněny.

Další články