This is a guide for installing / configuring a NextWindow Touchscreen on Ubuntu 22.04.
The files in this repo will install nwfermi 0.7.0.1.
It is based on the files provided by HP as SUSE drivers for the "HP Compaq Elite 8300 All-in-One Desktop PC". HP Support Link | Direct Link
The HP driver has not been updated anymore since 2013, I've made following enhancements:
For models 1926:1846 and 1926:1878 you need to install the additional "fwprod" daemon. Its usage is unclear but seems to work according to #4. See additional steps as required outlined below.
apt-get install dkms build-essential autoconf xutils-dev libtool xserver-xorg-dev libc6-i386 pkg-config evtest
Install libudev1 and symlink it to libudev0 (no longer available as i386)
apt-get install libudev1:i386
ln -s /usr/lib/i386-linux-gnu/libudev.so.1 /usr/lib/i386-linux-gnu/libudev.so.0
# wget https://github.com/glorang/nwfermi/archive/refs/heads/master.zip
# unzip master.zip
# cd nwfermi-master
All following chapters assume you are executing the steps as outlined from within the nwfermi-master
folder.
# dkms unbuild nwfermi/0.6.5.0 --all
# cp -p -r usr/src/nwfermi-0.7.0.1 /usr/src
# dkms build nwfermi/0.7.0.1
# dkms install nwfermi/0.7.0.1
# cp etc/X11/xorg.conf.d/10-nwfermi.conf /etc/X11/xorg.conf.d/
# cp usr/sbin/nwfermi_daemon /usr/sbin
# cp etc/udev/rules.d/40-nw-fermi.rules /etc/udev/rules.d/
# cp etc/systemd/system/nwfermi@.service /etc/systemd/system/
# systemctl daemon-reload
# cp usr/sbin/fwprod /usr/sbin
# cp etc/systemd/system/fwprod-1926-1846.service /etc/systemd/system/
# cp etc/systemd/system/fwprod-1926-1878.service /etc/systemd/system/
# systemctl daemon-reload
# cd usr/src/xf86-input-nextwindow-0.3.4
# chmod +x autogen.sh ; ./autogen.sh
# make
# make install
# cp /usr/local/lib/xorg/modules/input/nextwindow_drv.* /usr/lib/xorg/modules/input/
Edit /etc/gdm3/custom.conf
and set WaylandEnable=false
in the [daemon]
section.
To be able to read the input device your local user must be part of the input group. You should add the gdm user to this group as well.
# usermod -a -G input gdm
# usermod -a -G input your_username
Reboot and everything should work! Enjoy.
Use following steps for some general debugging hints:
lsusb
and check if your model (1926:XXXX) is supported by the driver nw-fermi.c, line #49 and onwardslsmod |grep -i fermi
strings /dev/nwfermi1
(or nwfermi2) it should produce garbage text output when you touch the screen/usr/sbin/nwfermi_daemon /instanceId 1
, expected output:# /usr/sbin/nwfermi_daemon /instanceid 1
StartThreads
Starting bulk thread
Starting tl thread
After touching the screen:
state: 1, X: 14893, Y: 22044
state: 2, X: 14893, Y: 22044
state: 2, X: 14893, Y: 22044
For model 1926:1846 : Start fwproc manually /usr/sbin/fwprod /product_id 0x1846 /message 004302F300 /padding_size 65 /timeout 300 /daemon
For model 1926:1878 : Start fwproc manually /usr/sbin/fwprod /product_id 0x1878 /message 004302F001 /padding_size 65 /timeout 300 /daemon
Run evtest and select "Nextwindow Fermi Touchscreen" and touch your screen, you should see it generate events. Expected output:
# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event8: Nextwindow Fermi Touchscreen
...
Select the device event number [0-21]: 8
Input driver version is 1.0.1
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "Nextwindow Fermi Touchscreen"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 261 (BTN_5)
Event code 272 (BTN_LEFT)
Event code 273 (BTN_RIGHT)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 15028
Min 0
Max 32767
Event code 1 (ABS_Y)
Value 18035
Min 0
Max 32767
Event code 48 (ABS_MT_TOUCH_MAJOR)
Value 0
Min 0
Max 32767
Event code 49 (ABS_MT_TOUCH_MINOR)
Value 0
Min 0
Max 32767
Event code 53 (ABS_MT_POSITION_X)
Value 0
Min 0
Max 32767
Event code 54 (ABS_MT_POSITION_Y)
Value 0
Min 0
Max 32767
Event code 57 (ABS_MT_TRACKING_ID)
Value 0
Min 0
Max 255
Properties:
Testing ... (interrupt to exit)
After touching the screen:
Event: time 1673258489.763882, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 0
Event: time 1673258489.763882, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 16527
Event: time 1673258489.763882, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 12131
Event: time 1673258489.763882, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 1000
Event: time 1673258489.763882, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 1000
Event: time 1673258489.763882, ++++++++++++++ SYN_MT_REPORT ++++++++++++
Event: time 1673258489.763882, type 1 (EV_KEY), code 272 (BTN_LEFT), value 1
Event: time 1673258489.763882, type 3 (EV_ABS), code 0 (ABS_X), value 16527
Event: time 1673258489.763882, type 3 (EV_ABS), code 1 (ABS_Y), value 12131
Event: time 1673258489.763882, -------------- SYN_REPORT ------------
Event: time 1673258489.784821, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 0
Event: time 1673258489.784821, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 16527
Event: time 1673258489.784821, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 12131
Event: time 1673258489.784821, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 1000
Event: time 1673258489.784821, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 1000
/home/<username>/.local/share/xorg/Xorg.0.log
(or Xorg.1.log), expected output:$ grep -i fermi /home/glorang/.local/share/xorg/Xorg.1.log
[ 52.662] (II) config/udev: Adding input device Nextwindow Fermi Touchscreen (/dev/input/event9)
[ 52.662] (**) Nextwindow Fermi Touchscreen: Applying InputClass "libinput pointer catchall"
[ 52.662] (**) Nextwindow Fermi Touchscreen: Applying InputClass "Nextwindow Fermi Touchscreen"
[ 52.662] (II) Using input driver 'nextwindow' for 'Nextwindow Fermi Touchscreen'
[ 52.662] (**) Nextwindow Fermi Touchscreen: always reports core events
[ 52.662] (**) Nextwindow Fermi Touchscreen: always reports core events
[ 52.662] (II) Nextwindow Fermi Touchscreen: Using device /dev/input/event9.
[ 52.662] (II) Nextwindow Fermi Touchscreen: Using touch help.
[ 52.718] (II) XINPUT: Adding extended input device "Nextwindow Fermi Touchscreen" (type: UNKNOWN, id 16)
[ 52.718] (**) Nextwindow Fermi Touchscreen: (accel) keeping acceleration scheme 1
[ 52.718] (**) Nextwindow Fermi Touchscreen: (accel) acceleration profile 0
[ 52.718] (**) Nextwindow Fermi Touchscreen: (accel) acceleration factor: 2.000
[ 52.718] (**) Nextwindow Fermi Touchscreen: (accel) acceleration threshold: 4
[ 52.718] (II) Nextwindow Fermi Touchscreen: On.
[ 52.718] (II) config/udev: Adding input device Nextwindow Fermi Touchscreen (/dev/input/js0)
[ 52.718] (**) Nextwindow Fermi Touchscreen: Applying InputClass "Nextwindow Fermi Touchscreen"
[ 52.718] (II) Using input driver 'nextwindow' for 'Nextwindow Fermi Touchscreen'
[ 52.718] (**) Nextwindow Fermi Touchscreen: always reports core events
[ 52.718] (**) Nextwindow Fermi Touchscreen: always reports core events
[ 52.718] (II) Nextwindow Fermi Touchscreen: Using device /dev/input/js0.
[ 52.718] (II) Nextwindow Fermi Touchscreen: Using touch help.
[ 52.770] (II) XINPUT: Adding extended input device "Nextwindow Fermi Touchscreen" (type: UNKNOWN, id 17)
[ 52.770] (**) Nextwindow Fermi Touchscreen: (accel) keeping acceleration scheme 1
[ 52.770] (**) Nextwindow Fermi Touchscreen: (accel) acceleration profile 0
[ 52.770] (**) Nextwindow Fermi Touchscreen: (accel) acceleration factor: 2.000
[ 52.770] (**) Nextwindow Fermi Touchscreen: (accel) acceleration threshold: 4
[ 52.770] (II) Nextwindow Fermi Touchscreen: On.
[ 52.770] (II) config/udev: Adding input device Nextwindow Fermi Touchscreen (/dev/input/mouse3)
[ 52.770] (**) Nextwindow Fermi Touchscreen: Applying InputClass "Nextwindow Fermi Touchscreen"
[ 52.770] (II) Using input driver 'nextwindow' for 'Nextwindow Fermi Touchscreen'
[ 52.770] (**) Nextwindow Fermi Touchscreen: always reports core events
[ 52.770] (**) Nextwindow Fermi Touchscreen: always reports core events
[ 52.770] (II) Nextwindow Fermi Touchscreen: Using device /dev/input/mouse3.
[ 52.770] (II) Nextwindow Fermi Touchscreen: Using touch help.
[ 52.826] (II) XINPUT: Adding extended input device "Nextwindow Fermi Touchscreen" (type: UNKNOWN, id 18)
[ 52.826] (**) Nextwindow Fermi Touchscreen: (accel) keeping acceleration scheme 1
[ 52.826] (**) Nextwindow Fermi Touchscreen: (accel) acceleration profile 0
[ 52.826] (**) Nextwindow Fermi Touchscreen: (accel) acceleration factor: 2.000
[ 52.826] (**) Nextwindow Fermi Touchscreen: (accel) acceleration threshold: 4
[ 52.826] (II) Nextwindow Fermi Touchscreen: On.