donniebreve / touchcursor-linux

TouchCursor style keyboard remapping for Linux.
GNU General Public License v2.0
133 stars 28 forks source link

Program not running after installation #36

Closed mattiasJohnson closed 2 years ago

mattiasJohnson commented 2 years ago

I am running ubuntu 20.04 with i3wm and my computer is Lenovo Legion 7 and after following through the installation (that I've done on other computers before so believe I've done my part correctly) there is no touchcursor.service. Sorry for the wall of text wasn't sure what data was relevant so included most of it.

Installation :heavy_check_mark:

From what I've understood I have successfully installed touchcursor. I cloned it directly and in touchcursor-linux/src/key.c comment out the four lines mentioned in https://github.com/donniebreve/touchcursor-linux/issues/35 and then preceded with

$ make
gcc -g -Wall -c src/keys.c -o obj/keys.o
gcc -g -Wall -c src/queue.c -o obj/queue.o
gcc -g -Wall -c src/emit.c -o obj/emit.o
gcc -g -Wall -c src/config.c -o obj/config.o
gcc -g -Wall -c src/binding.c -o obj/binding.o
gcc -g -Wall -c src/main.c -o obj/main.o
gcc -g -Wall -c src/touchcursor.c -o obj/touchcursor.o
gcc  ./obj/keys.o  ./obj/queue.o  ./obj/emit.o  ./obj/config.o  ./obj/binding.o  ./obj/main.o  ./obj/touchcursor.o -Wall -o out/touchcursor
$ make install
# Stopping the service
systemctl --user stop touchcursor.service

# Copying application to /usr/bin
# This action requires sudo.
sudo cp ./out/touchcursor /usr/bin
sudo chmod u+s /usr/bin/touchcursor

# Copying default configuration file to /home/mattias/.config/touchcursor/touchcursor.conf
mkdir -p /home/mattias/.config/touchcursor
cp -n touchcursor.conf /home/mattias/.config/touchcursor

# Copying service file to /home/mattias/.config/systemd/user
mkdir -p /home/mattias/.config/systemd/user
cp -f touchcursor.service /home/mattias/.config/systemd/user

# Enabling and starting the service
systemctl --user daemon-reload
systemctl --user enable touchcursor.service
systemctl --user start touchcursor.service

Updating config :heavy_check_mark:

I'm changing config Name line to Name="AT Translated Set 2 keyboard" since I get the following output:

$ cat /proc/bus/input/devices | less
# ...
I: Bus=0011 Vendor=0001 Product=0001 Version=ab83
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input3
U: Uniq=
H: Handlers=sysrq kbd event3 leds 
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
# ...

No touchcursor.service :x:

systemctl list-units --type=service --allboth before and after touchcursor.service restart does not include touchcursor.service.

Testing running the binary :x:

Running binary in touchcursor-linux/out/touchcursor :x:

My guess is that trying this binary is unnecessary since it's not the one being run by the service but anyhow:

$ ./touchcursor 
info: looking for the configuration file at: /home/mattias/.config/touchcursor/touchcursor.conf
info: found the configuration file
info: deviceName: Name="AT Translated Set 2 keyboard"
info: deviceNumber: 1
info: found the keyboard event
info: attempting to attach to: '/dev/input/event3'
error: cannot open the input device, is this file set to the 'input' group or equivalent?: Permission denied.
error: could not capture the keyboard device

Running binary in /usr/bin/touchcursor :x:

$ touchcursor 
info: looking for the configuration file at: /home/mattias/.config/touchcursor/touchcursor.conf
info: found the configuration file
info: deviceName: Name="AT Translated Set 2 keyboard"
info: deviceNumber: 1
info: found the keyboard event
info: attempting to attach to: '/dev/input/event3'
info: attached to: AT Translated Set 2 keyboard
error: EVIOCGRAB: Device or resource busy.
info: successfully created virtual output device
info: running
mattiasJohnson commented 2 years ago

I'm not enlightened enough about how systemctl works, I believe the service is running. I saw a similar issue https://github.com/donniebreve/touchcursor-linux/issues/33 and here's the output of the two commands the guy in that thread was asked to run

$ systemctl --user start touchcursor.service
$ systemctl --user status touchcursor.service
● touchcursor.service - Touch Cursor Service
     Loaded: loaded (/home/mattias/.config/systemd/user/touchcursor.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-11-24 21:41:27 CST; 2s ago
   Main PID: 71710 (touchcursor)
     CGroup: /user.slice/user-1000.slice/user@1000.service/touchcursor.service
             └─71710 /usr/bin/touchcursor

And here are the lines follwing Started Touch Cursor Service from the systemctl --user restart touchcursor.service; sleep 5; journalctl -e command

nov 24 21:41:27 mattias-Legion-S7-15ACH6 systemd[1765]: Started Touch Cursor Service.
nov 24 21:41:27 mattias-Legion-S7-15ACH6 kernel: input: Virtual TouchCursor Keyboard as /devices/virtual/input/input37
nov 24 21:41:27 mattias-Legion-S7-15ACH6 systemd-logind[741]: Watching system buttons on /dev/input/event21 (Virtual TouchCursor Keyboard)
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) config/udev: Adding input device Virtual TouchCursor Keyboard (/dev/input/event21)
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: Applying InputClass "libinput pointer catchall"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: Applying InputClass "libinput keyboard catchall"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) Using input driver 'libinput' for 'Virtual TouchCursor Keyboard'
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) systemd-logind: got fd for /dev/input/event21 13:85 fd 86 paused 0
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: always reports core events
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "Device" "/dev/input/event21"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "_source" "server/udev"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: is tagged by udev as: Keyboard Mouse
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: device is a pointer
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: device is a keyboard
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: device removed
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) libinput: Virtual TouchCursor Keyboard: needs a virtual subdevice
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "config_info" "udev:/sys/devices/virtual/input/input37/event21"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) XINPUT: Adding extended input device "Virtual TouchCursor Keyboard" (type: MOUSE, id 21)
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "AccelerationScheme" "none"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: (accel) selected scheme none/0
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: (accel) acceleration factor: 2.000
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: (accel) acceleration threshold: 4
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: is tagged by udev as: Keyboard Mouse
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: device is a pointer
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) event21 - Virtual TouchCursor Keyboard: device is a keyboard
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: Applying InputClass "libinput pointer catchall"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: Applying InputClass "libinput keyboard catchall"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) Using input driver 'libinput' for 'Virtual TouchCursor Keyboard'
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) systemd-logind: returning pre-existing fd for /dev/input/event21 13:85
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Virtual TouchCursor Keyboard: always reports core events
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "Device" "/dev/input/event21"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "_source" "_driver/libinput"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) libinput: Virtual TouchCursor Keyboard: is a virtual subdevice
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "config_info" "udev:/sys/devices/virtual/input/input37/event21"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (II) XINPUT: Adding extended input device "Virtual TouchCursor Keyboard" (type: KEYBOARD, id 22)
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "xkb_layout" "se,us"
nov 24 21:41:27 mattias-Legion-S7-15ACH6 /usr/lib/gdm3/gdm-x-session[4032]: (**) Option "xkb_variant" ","
nov 24 21:41:31 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:31 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:31 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811691.683:16750): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:31 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811691.683:16751): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1/online" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811692.383:16752): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1/online" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811692.383:16753): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811692.383:16754): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811692.383:16755): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811692.383:16756): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:32 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:38 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:38 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811698.392:16757): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:38 mattias-Legion-S7-15ACH6 kernel: audit: type=1400 audit(1637811698.392:16758): apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:38 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:2c/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_full" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
nov 24 21:41:39 mattias-Legion-S7-15ACH6 audit[10529]: AVC apparmor="ALLOWED" operation="open" profile="snap.polybar-git.polybar-git" name="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1/online" pid=10529 comm="polybar" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
donniebreve commented 2 years ago

Hey @mattiasJohnson

No service

Make sure you run systemctl --user list-units --type=service --all

Systemctl has two spaces, system services and user services. Most services run in the system wide group (systemctl ...) but touchcursor-linux runs in the user group (systemctl --user ...)

Running binary in touchcursor-linux/out/touchcursor

touchcursor-linux requires elevated access, so when it installs the application to /usr/bin, the file owner is root and the install script sets the sticky bit.

These errors tell the story:

error: cannot open the input device, is this file set to the 'input' group or equivalent?: Permission denied. error: could not capture the keyboard device

Looks like I need to update that error message though, I moved away from using the input group.

If you want to run the touchcursor-linx/out/touchcursor application, you have to run it with sudo. Unfortunately running it with sudo will have the application think it is running as root, and it will look for the configuration file at /etc/touchcursor/touchcursor.conf

See https://www.redhat.com/sysadmin/suid-sgid-sticky-bit (user + s (pecial)) for more information.

Running binary in /usr/bin/touchcursor

This error is telling you the device has already been captured by something:

error: EVIOCGRAB: Device or resource busy.

Try first running systemctl --user stop touchcursor, then run /usr/bin/touchcursor to see the output from the application.

donniebreve commented 2 years ago

Closing due to inactivity.