pfps / yoga-laptop

Systems and information to make Lenovo Yoga laptops work better
GNU General Public License v3.0
156 stars 30 forks source link

Usage (Ubuntu) #3

Closed rwijtvliet closed 10 years ago

rwijtvliet commented 10 years ago

I'm new to all this, so be gentle ;) Thanks for writing these patches to get the lenovo 2 pro laptops play nicely with linux!

2 Issues:

1) Is it possible the documentation in /yoga-laptop/yoga-laptop/README is outdated? It reads

Then to load the module itself
  sudo insmod ./ideapad_laptop.ko 

But the .ko file seems to have been removed since.

2) Then, for /yoga-laptop/sensors: As soon as I run ./setup, the terminal says

./setup: 5: ./setup: Bad substitution

I'm running ubuntu 13.10 with gnome 3.10.

pfps commented 10 years ago

Yes, the docs might not match up.

I'll check for sure tomorrow.

peter

On 03/16/2014 03:51 PM, physicalgerard wrote:

I'm new to all this, so be gentle ;)

Is it possible the documentation in /yoga-laptop/yoga-laptop/README is outdated?

Then to load the module itself sudo insmod ./ideapad_laptop.ko

The .ko file seems to have been removed.

Then, for /yoga-laptop/sensors:

As soon as I run ./setup, the terminal says

./setup: 5: ./setup: Bad substitution

I'm running ubuntu 13.10 with gnome 3.10.

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3.

pfps commented 10 years ago

I got to this earlier than expected.

Grabthe README again. The new directions should work.

peter

On 03/16/2014 03:51 PM, physicalgerard wrote:

I'm new to all this, so be gentle ;)

Is it possible the documentation in /yoga-laptop/yoga-laptop/README is outdated?

Then to load the module itself sudo insmod ./ideapad_laptop.ko

The .ko file seems to have been removed.

Then, for /yoga-laptop/sensors:

As soon as I run ./setup, the terminal says

./setup: 5: ./setup: Bad substitution

I'm running ubuntu 13.10 with gnome 3.10.

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3.

pfps commented 10 years ago

I'm not sure what the problem with setup is.

Could you edit the file to add the -vx options to the first line of the script?

Then when you runthe script, you should be able to see what is causing the problem.

peter

On 03/16/2014 03:51 PM, physicalgerard wrote:

I'm new to all this, so be gentle ;)

Is it possible the documentation in /yoga-laptop/yoga-laptop/README is outdated?

Then to load the module itself sudo insmod ./ideapad_laptop.ko

The .ko file seems to have been removed.

Then, for /yoga-laptop/sensors:

As soon as I run ./setup, the terminal says

./setup: 5: ./setup: Bad substitution

I'm running ubuntu 13.10 with gnome 3.10.

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3.

rwijtvliet commented 10 years ago

It outputs to the terminal

#!/bin/sh -vx
# Fix up permissions for all sensors and run orientation program
# Single optional argument is group to use

group=${GROUPS[0]}
./setup: 5: ./setup: Bad substitution

When running ./orientation, output is Failed to find the accel_3d sensor

And ./status returns bash: ./status: /bin/csh: bad interpreter: No such file or directory

The problem is, where ubuntu saves its configuration files?

pfps commented 10 years ago

Hmm. You are running ubuntu, right?

Anyway, pull down the latest version, as I've made a few changes.

1/ You maynot have the IIO and sensor hub stuff installed.

Could you check whether the directory /sys/bus/iio/devices/iio:device0 exists? If not, you probably don't have the IIO or sensor hub subsysteminstalled because Ubuntu doesn't include it.

See whether the following works:

If it does work, then you can sudo make install to install the drivers, reboot, and try again.

WARNING: This will add new drivers to your installed system. Hopefully nothing will break, but ....

2/The status script used csh. I just fixed it to use sh instead.

3/ I'm not sure what the problem with setup is. I modified it to take an optional argument, which should be a group you belong to.

peter

On 03/17/2014 11:49 AM, physicalgerard wrote:

It outputs to the terminal

|#!/bin/sh -vx

Fix up permissions for all sensors and run orientation program

Single optional argument is group to use

group=${GROUPS[0]} ./setup: 5: ./setup: Bad substitution |

When running ./orientation, output is |Failed to find the accel_3d sensor|

And ./status returns |bash: ./status: /bin/csh: bad interpreter: No such file or directory|

The problem is, where ubuntu saves its configuration files?

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3#issuecomment-37854879.

rwijtvliet commented 10 years ago

Yes, ubuntu 13.10 (with unity and gnome 3.10 desktop environments)

1/ there is indeed no such folder. /sys/bus is the furthest I got. I tried getting the kernel-devel package, no luck initially. I'm following http://askubuntu.com/questions/359032/unable-to-locate-package-linux-kernel-devel now (as I said, I'm new to this ;)), but the third line (in the 'answer') is taking a long time and is getting many files from us.archive.ubuntu.com; I wonder if that's what going to solve this. I'll let you know when it's done.

2/ This script also looks for /sys/bus/iio. We'll have to see if the solution under /1/ solves this.

3/ It seems to have a problem with group=${GROUPS[0]}, when I enter "groups" in a terminal it returns

gerardus adm cdrom sudo dip plugdev lpadmin sambashare
rwijtvliet commented 10 years ago

result of make:

make -C /usr/src/kernels/3.11.0-18-generic SUBDIRS=/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers modules
make: *** /usr/src/kernels/3.11.0-18-generic: No such file or directory.  Stop.
make: *** [default] Error 2
nikolauspolak commented 10 years ago

On Ubuntu you'll need the kernel-headers package, also perhaps build-essentials and then change in the Makefile the KDIR variable to: KDIR := /usr/src/linux-headers-$(shell uname -r) And for "sudo make install" I had to change in the Makefile the last lines (below install:) from /usr/lib/... to /lib/... - I don't know if there's a better way, but at least this works for me.

pfps commented 10 years ago

Thanks for the information.

I've added this information to the README and adjusted the Makefile to make the change easer, by adding a new variable.

peter

On 03/18/2014 01:06 AM, Nikolaus Polak wrote:

On Ubuntu you'll need the kernel-headers package, also perhaps build-essentials and then change in the Makefile the KDIR variable to: KDIR := /usr/src/linux-headers-$(shell uname -r) And for "sudo make install" I had to change in the Makefile the last lines (below install:) from /usr/lib/... to /lib/... - I don't know if there's a better way, but at least this works for me.

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3#issuecomment-37907718.

rwijtvliet commented 10 years ago

Thanks for your help and input.

I think the Makefile's KDIR var (in the yoga_laptop directory) is not quite there yet; I changed it as @nikolauspolak suggested and that part then works under ubuntu.

For make in the sensors/driver directory, I had to make the same change to the Makefile as in the yoga_laptop directory (KDIR and DDIR variables) to get meaningful output. However, still no .ko files. Output of the terminal is now

gerardus@OpaUndOma:~/Downloads/yoga-laptop-master/sensors/drivers$ make
echo /usr/src/linux-headers-3.11.0-18-generic
/usr/src/linux-headers-3.11.0-18-generic
make -C /usr/src/linux-headers-3.11.0-18-generic SUBDIRS=/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers modules
make[1]: Entering directory `/usr/src/linux-headers-3.11.0-18-generic'
  CC [M]  /home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.o
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c: In function ‘hid_sensor_data_rdy_trigger_set_state’:
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:41:3: error: implicit declaration of function ‘sensor_hub_device_open’ [-Werror=implicit-function-declaration]
   if (sensor_hub_device_open(st->hsdev))
   ^
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:49:3: error: implicit declaration of function ‘sensor_hub_device_close’ [-Werror=implicit-function-declaration]
   sensor_hub_device_close(st->hsdev);
   ^
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:57:30: error: ‘struct hid_sensor_hub_attribute_info’ has no member named ‘logical_minimum’
  state_val += st->power_state.logical_minimum;
                              ^
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:58:32: error: ‘struct hid_sensor_hub_attribute_info’ has no member named ‘logical_minimum’
  report_val += st->report_state.logical_minimum;
                                ^
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c: In function ‘hid_sensor_remove_trigger’:
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:72:30: error: ‘struct hid_sensor_common’ has no member named ‘trigger’
  iio_trigger_unregister(attrb->trigger);
                              ^
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:73:24: error: ‘struct hid_sensor_common’ has no member named ‘trigger’
  iio_trigger_free(attrb->trigger);
                        ^
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c: In function ‘hid_sensor_setup_trigger’:
/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.c:104:25: error: ‘struct hid_sensor_common’ has no member named ‘trigger’
  indio_dev->trig = attrb->trigger = trig;
                         ^
cc1: some warnings being treated as errors
make[2]: *** [/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers/hid-sensor-trigger.o] Error 1
make[1]: *** [_module_/home/gerardus/Downloads/yoga-laptop-master/sensors/drivers] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.11.0-18-generic'
make: *** [default] Error 2

Maybe it helps, keeping in mind I might just have done something nooby.

Best regards

nikolauspolak commented 10 years ago

Thanks @pfps , the detection doesn't seem to work somehow:

nik@niks-Yoga:/tmp/yoga-laptop/sensors/drivers$ LANG=C make
echo /usr/src/kernels/3.13.0-18-generic
/usr/src/kernels/3.13.0-18-generic
make -C /usr/src/kernels/3.13.0-18-generic SUBDIRS=/tmp/yoga-laptop/sensors/drivers modules
make: *** /usr/src/kernels/3.13.0-18-generic: No such file or directory.  Stop.
make: *** [default] Error 2

Right path would be /usr/src/linux-headers-3.13.0-18 @physicalgerard I guess you need a newer kernel, I'm on Ubuntu 14.04 / linux 3.13.0-18-generic.

pfps commented 10 years ago

I expect that this is the root cause of this problem. You should update to the most recent version of Ubuntu.

When I started working on the sensors, I was using kernel 3.12, which had problems. I switched to 3.13 fairly early on. I expect that kernel 3.11 does not have some of the required functionality. The driver code is taken from a development area and, Ibelieve, will be in 3.14.

peter

On 03/22/2014 11:09 AM, Nikolaus Polak wrote:

@physicalgerard https://github.com/physicalgerard I guess you need a newer kernel, I'm on Ubuntu 14.04 / linux 3.13.0-18-generic.

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3#issuecomment-38359618.

rwijtvliet commented 10 years ago

Alright, I've downloaded and installed the latest image of ubuntu 14.04. Linux kernel version is 3.13.0-19-generic. Here are my experiences:

1| First the sensors/drivers directory:

1.1| make returned some errors, after changing the Makefile section

ifeq ($shell grep Fedora /etc/issue,"")
KDIR := /usr/src/linux-headers-$(shell uname -r)
DDIR := /lib/modules/$(shell uname -r)/kernel/drivers/
else
KDIR := /usr/src/kernels/$(shell uname -r)
DDIR := /usr/lib/modules/$(shell uname -r)/kernel/drivers/
endif

to

KDIR := /usr/src/linux-headers-$(shell uname -r)
DDIR := /lib/modules/$(shell uname -r)/kernel/drivers/

it seemed to run as planned.

1.2| The next step sudo make install seemed to run just fine, the output was

install --owner=root --group=root --mode=644 hid-sensor-hub.ko /lib/modules/3.13.0-19-generic/kernel/drivers//hid
install --owner=root --group=root --mode=644 hid-sensor-trigger.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/common/hid-sensors
install --owner=root --group=root --mode=644 hid-sensor-accel-3d.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/accel
install --owner=root --group=root --mode=644 hid-sensor-als.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/light
install --owner=root --group=root --mode=644 hid-sensor-gyro-3d.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/gyro
install --owner=root --group=root --mode=644 hid-sensor-magn-3d.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/magnetometer 

1.3| Testing 'orientation' After rebooting, sudo ./orientation is working! The screen rotates whenever it is held a certain way. Cool!

1.4| Testing 'status' ./status had some errors. After changing the line X=$1 to X=1 its output is

Sensor name: accel_3d
Channel /sys/bus/iio/devices/iio:device1/scan_elements/in_accel_x_en:t status: -1
Channel /sys/bus/iio/devices/iio:device1/scan_elements/in_accel_y_en:t status: -1
Channel /sys/bus/iio/devices/iio:device1/scan_elements/in_accel_z_en:t status: -1
Buffer status: 0
Buffer length: 128
Current trigger: accel_3d-dev1

And if I include the code in a loop for X in 0 1 2 3 this is shown for each of the 4 sensors. So, success!

So, the sensors/drivers part runs well this time I think.

2| Then the yoga_laptop part:

2.1| make gives an error at first, after changing the Makefile section

KDIR := /usr/src/kernels/$(shell uname -r)

to

KDIR := /usr/src/linux-headers-$(shell uname -r)

the output is

NOTE: You need to have the kernel-devel package installed
echo /usr/src/linux-headers-3.13.0-19-generic
/usr/src/linux-headers-3.13.0-19-generic
make -C /usr/src/linux-headers-3.13.0-19-generic SUBDIRS=/home/gerardus/Downloads/origineel/yoga_laptop modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-19-generic'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-19-generic'

I guess that was successful.

2.2| sudo make install required deleting /usr from the Makefile line

install --owner=root --group=root --mode=644 ideapad-laptop.ko /usr/lib/modules/$(shell uname -r)/kernel/drivers/platform/x86

after which it outputs

install --owner=root --group=root --mode=644 ideapad-laptop.ko /lib/modules/3.13.0-19-generic/kernel/drivers/platform/x86
install --owner=root --group=root --mode=644 90-yoga-keyboard.hwdb /etc/udev/hwdb.d
udevadm hwdb --update
NOTE: You also need to cp -pr xkeycode ~/.Xmodmap

I think this means success right!?

2.3| sudo make install-keys outputs

install --owner=root --group=root --mode=644 90-yoga-keyboard.hwdb /etc/udev/hwdb.d
udevadm hwdb --update
NOTE: You also need to cp -pr xkeycode ~/.Xmodmap

seems OK too.

2.4| Testing After reboot, Fn F6 works perfectly, and also wifi is enabled immediately (needed to sudo rmmod ideapad-laptop before)

So I think that this means that all is working. Thanks!!

pfps commented 10 years ago

On 03/26/2014 02:44 PM, physicalgerard wrote:

Alright, I've downloaded and installed the latest image of ubuntu 14.04. Linux kernel version is 3.13.0-19-generic. Here are my experiences:

1| First the sensors/drivers directory:

1.1| |make| returned some errors, after changing the Makefile section

ifeq ($shell grep Fedora /etc/issue,"") KDIR := /usr/src/linux-headers-$(shell uname -r) DDIR := /lib/modules/$(shell uname -r)/kernel/drivers/ else KDIR := /usr/src/kernels/$(shell uname -r) DDIR := /usr/lib/modules/$(shell uname -r)/kernel/drivers/ endif

to

KDIR := /usr/src/linux-headers-$(shell uname -r) DDIR := /lib/modules/$(shell uname -r)/kernel/drivers/

it seemed to run as planned.

Hmm. What error did you get? What version of make (make --version) is on your system?

1.2| The next step |sudo make install| seemed to run just fine, the output was

install --owner=root --group=root --mode=644 hid-sensor-hub.ko /lib/modules/3.13.0-19-generic/kernel/drivers//hid install --owner=root --group=root --mode=644 hid-sensor-trigger.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/common/hid-sensors install --owner=root --group=root --mode=644 hid-sensor-accel-3d.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/accel install --owner=root --group=root --mode=644 hid-sensor-als.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/light install --owner=root --group=root --mode=644 hid-sensor-gyro-3d.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/gyro install --owner=root --group=root --mode=644 hid-sensor-magn-3d.ko /lib/modules/3.13.0-19-generic/kernel/drivers//iio/magnetometer

1.3| Testing 'orientation' After rebooting, |sudo ./orientation| is working! The screen rotates whenever it is held a certain way. Cool!

Excellent.

1.4| Testing 'status' |./status| had some errors. After changing the line |X=$1| to |X=1| its output is

Sensor name: accel_3d Channel /sys/bus/iio/devices/iio:device1/scan_elements/in_accel_x_en:t status: -1 Channel /sys/bus/iio/devices/iio:device1/scan_elements/in_accel_y_en:t status: -1 Channel /sys/bus/iio/devices/iio:device1/scan_elements/in_accel_z_en:t status: -1 Buffer status: 0 Buffer length: 128 Current trigger: accel_3d-dev1

And if I include the code in a loop |for X in 0 1 2 3| this is shown for each of the 4 sensors. So, success!

So, the sensors/drivers part runs well this time I think.

status is supposed to take an argument, e.g., status 1 for iio device 1. I'm going to have it default to 0 for no argument.

2| Then the yoga_laptop part:

2.1| |make| gives an error at first, after changing the Makefile session

KDIR := /usr/src/kernels/$(shell uname -r)

to

|KDIR := /usr/src/linux-headers-$(shell uname -r)|

|Hmm. This needs the same check for distribution as the drivers makefile|.
Does anyone have a good solution for this?

the output is

NOTE: You need to have the kernel-devel package installed echo /usr/src/linux-headers-3.13.0-19-generic /usr/src/linux-headers-3.13.0-19-generic make -C /usr/src/linux-headers-3.13.0-19-generic SUBDIRS=/home/gerardus/Downloads/origineel/yoga_laptop modules make[1]: Entering directory /usr/src/linux-headers-3.13.0-19-generic' Building modules, stage 2. MODPOST 1 modules make[1]: Leaving directory/usr/src/linux-headers-3.13.0-19-generic'

I guess that was successful.

No error, so successful. ;-)

2.2| |sudo make install| required deleting |/usr| from the Makefile line

|install --owner=root --group=root --mode=644 ideapad-laptop.ko /usr/lib/modules/$(shell uname -r)/kernel/drivers/platform/x86| |I made this change as well, as in Fedora you can use either.|||

after which it outputs

install --owner=root --group=root --mode=644 ideapad-laptop.ko /lib/modules/3.13.0-19-generic/kernel/drivers/platform/x86 install --owner=root --group=root --mode=644 90-yoga-keyboard.hwdb /etc/udev/hwdb.d udevadm hwdb --update NOTE: You also need to cp -pr xkeycode ~/.Xmodmap

I think this means success right!?

Yes. Just remember to do the cp. I don't know how to do a copy into a user's home directory in a root make script.

2.3| |sudo make install-keys| outputs

install --owner=root --group=root --mode=644 90-yoga-keyboard.hwdb /etc/udev/hwdb.d udevadm hwdb --update NOTE: You also need to cp -pr xkeycode ~/.Xmodmap

seems OK too.

make install does both install-driver and install-keys so this is not needed.

2.4| Testing After reboot, Fn F6 works perfectly, and also wifi is enabled immediately (needed to |sudo rmmod ideapad-laptop| before)

I think that you mean Fn F7 - the airplane key,

So I think that this means that all is working. Thanks!!

Looks good!

You should check to see whether Fn F6 works, whether the Novo key produces anything, and whether the orientation lock key does anything. To make Fn F6 work right you have to hook it (XF86TouchPadToggle) up to a script that toggles the touchpad on and off. To make the orientation lock key work right you have to hook it (o) up to the command pkill --signal SIGUSR1 --exact orientation

How you do this depends on your window manager. In XFCE this is in Settings->Keyboard->Application Shortcuts

peter

keshto commented 10 years ago

The Makefile for the sensor drivers, line 7 'ifeq ($shell grep Fedora /etc/issue,"")' should include a check for Ubuntu. I am on version 14.04 same as @physicalgerard.

pfps commented 10 years ago

I fiddled with this makefile. It now uses /etc/os-release, and should work for Fedora and Ubuntu.

peter

On 03/27/2014 10:54 AM, keshto wrote:

The Makefile for the sensor drivers, line 7 'ifeq ($shell grep Fedora /etc/issue,"")' should include a check for Ubuntu. I am on version 14.04 same as @physicalgerard https://github.com/physicalgerard.

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3#issuecomment-38838196.

rwijtvliet commented 10 years ago

Hey peter,

Thanks for you support. Understood everything sofar, but I'm stuck at hooking up the orientation lock key to the command.

1| I take it that the orientation lock key send a o key combination? Whenever I press it with a terminal window active, a 'r' is typed.

2| I tried out the command pkill --signal SIGUSR1 --exact orientation in terminal, but nothing is happening. (I tried holding the laptop sideways for example). Is that expected?

nikolauspolak commented 10 years ago

@pfps new makefile is perfect, thanks!

pfps commented 10 years ago

The orientation lock key generates a o

The orientation program listens for SIGUSR1 signals. If it gets one, then it toggles whether it is rotating the screen. If it gets two in short succession, it does a clockwise rotation and then stops rotating the screen.

|pkill --signal SIGUSR1 --exact orientation should send a SIGUSR1 signal to the orientation program||

|peter

On 03/28/2014 02:36 PM, physicalgerard wrote:

Hey peter,

Thanks for you support. Understood everything sofar, but I'm stuck at hooking up the orientation lock key to the command.

1| I take it that the orientation lock key send a o key combination? Whenever I press it with a terminal window active, a 'r' is typed.

2| I tried out the command |pkill --signal SIGUSR1 --exact orientation| in terminal, but nothing is happening. (I tried holding the laptop sideways for example). Is that expected?

Ruud

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3#issuecomment-38970725.

Buri commented 10 years ago

For home directory its sufficient to use ~ while running sudo, no solution for root shell however. Novo button produces Launch2. Works fine with in ubuntu.

Buri commented 10 years ago

Ok, after some digging i found that /usr/bin/logname returns current user name regardless of shell its running in (root or sudo). So something like cp -pr xkeycode /home/logname/.Xmodmap should work.

And since this project basically replaces missing drivers, I think its valid option to make this change system wide in /etc/X11/Xmodmap

pfps commented 10 years ago

Good.

I modified the makefile to incorporate your suggestion.

peter

On 04/27/2014 02:47 AM, Jakub Buriánek wrote:

Ok, after some digging i found that /usr/bin/logname returns current user name regardless of shell its running in (root or sudo). So something like cp -pr xkeycode /home/|logname|/.Xmodmap should work

— Reply to this email directly or view it on GitHub https://github.com/pfps/yoga-laptop/issues/3#issuecomment-41492355.