diff --git a/.gitignore b/.gitignore index 3e93732..bf177dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ __pycache__ *~ numberpad_dev +*.code-workspace diff --git a/install_external_keyboard_toggle.sh b/install_external_keyboard_toggle.sh index 5e0c9a7..dd67c68 100644 --- a/install_external_keyboard_toggle.sh +++ b/install_external_keyboard_toggle.sh @@ -38,6 +38,8 @@ case "$RESPONSE" in [yY][eE][sS]|[yY]) echo + sudo mkdir -p $INSTALL_UDEV_DIR_PATH/rules.d + cat "udev/90-numberpad-external-keyboard.rules" | INSTALL_DIR_PATH=$INSTALL_DIR_PATH envsubst '$INSTALL_DIR_PATH' | sudo tee "$INSTALL_UDEV_DIR_PATH/rules.d/90-numberpad-external-keyboard.rules" >/dev/null if [[ $? != 0 ]]; then diff --git a/install_power_supply_saver.sh b/install_power_supply_saver.sh index 61e8dfb..65a3023 100644 --- a/install_power_supply_saver.sh +++ b/install_power_supply_saver.sh @@ -32,6 +32,8 @@ case "$RESPONSE" in [yY][eE][sS]|[yY]) echo + sudo mkdir -p $INSTALL_UDEV_DIR_PATH/rules.d + cat "udev/80-numberpad-power-supply.rules" | INSTALL_DIR_PATH=$INSTALL_DIR_PATH envsubst '$INSTALL_DIR_PATH' | sudo tee "$INSTALL_UDEV_DIR_PATH/rules.d/80-numberpad-power-supply.rules" >/dev/null if [[ $? != 0 ]]; then diff --git a/install_user_groups.sh b/install_user_groups.sh old mode 100644 new mode 100755 index 7d73e61..4f352b3 --- a/install_user_groups.sh +++ b/install_user_groups.sh @@ -42,10 +42,11 @@ fi # https://github.com/asus-linux-drivers/asus-numberpad-driver/issues/231 sudo mkdir -p /etc/modules-load.d +sudo mkdir -p $INSTALL_UDEV_DIR_PATH/rules.d -echo 'KERNEL=="uinput", GROUP="uinput", MODE="0660"' | sudo tee $INSTALL_UDEV_DIR_PATH/rules.d/99-asus-numberpad-driver-uinput.rules >/dev/null +echo 'KERNEL=="uinput", GROUP="uinput", MODE="0660"' | sudo tee $INSTALL_UDEV_DIR_PATH/rules.d/55-asus-numberpad-driver-uinput.rules >/dev/null echo 'uinput' | sudo tee /etc/modules-load.d/uinput-asus-numberpad-driver.conf >/dev/null -echo 'SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"' | sudo tee $INSTALL_UDEV_DIR_PATH/rules.d/99-asus-numberpad-driver-i2c-dev.rules >/dev/null +echo 'SUBSYSTEM=="i2c-dev", KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"' | sudo tee $INSTALL_UDEV_DIR_PATH/rules.d/55-asus-numberpad-driver-i2c-dev.rules >/dev/null echo "i2c-dev" | sudo tee /etc/modules-load.d/i2c-dev-asus-numberpad-driver.conf >/dev/null if [[ $? != 0 ]]; then diff --git a/numberpad.py b/numberpad.py index 568034d..3a06db5 100755 --- a/numberpad.py +++ b/numberpad.py @@ -738,6 +738,8 @@ def send_value_to_touchpad_via_i2c(value): 0x0d, 0x14, 0x03, int(value, 16), 0xad] msg = I2C.Message(data) i2c.transfer(device_addr, [msg]) + except PermissionError: + log.error('Permission denied during I2C communication. Please ensure you are in the "i2c" group.') except Exception as e: log.error('Error during sending via i2c: "%s"', e) @@ -1069,6 +1071,9 @@ def get_compose_key_start_events_for_unicode_string(reset_udev = True): path = f"/dev/i2c-{device_id}" i2c = I2C(path) i2c.close() +except PermissionError: + log.error("Permission denied when opening I2C bus (id: %s). Please ensure you are in the 'i2c' group and that udev rules are applied. Try logging out and back in, or reboot.", device_id) + sys.exit(1) except Exception as e: log.error("Can't open the I2C bus connection (id: %s): %s", device_id, e) sys.exit(1) @@ -1885,6 +1890,19 @@ def unpressed_numpad_key(replaced_by_key=None): except OSError as e: log.warning("Cannot send press event, %s", e) + if replaced_by_key: + abs_mt_slot_numpad_key[abs_mt_slot_value] = replaced_by_key + else: + set_none_to_current_mt_slot() + + if enabled_touchpad_pointer == 1: + ungrab + if events: + try: + udev.send_events(events) + except OSError as e: + log.warning("Cannot send press event, %s", e) + if replaced_by_key: abs_mt_slot_numpad_key[abs_mt_slot_value] = replaced_by_key else: diff --git a/uninstall_user_groups.sh b/uninstall_user_groups.sh index 5b5f03c..91105a8 100644 --- a/uninstall_user_groups.sh +++ b/uninstall_user_groups.sh @@ -4,13 +4,13 @@ source non_sudo_check.sh echo $INSTALL_UDEV_DIR_PATH -sudo rm -f $INSTALL_UDEV_DIR_PATH/rules.d/99-asus-numberpad-driver-uinput.rules +sudo rm -f $INSTALL_UDEV_DIR_PATH/rules.d/55-asus-numberpad-driver-uinput.rules if [[ $? != 0 ]]; then echo "Something went wrong when removing the uinput udev rule" fi -sudo rm -f $INSTALL_UDEV_DIR_PATH/rules.d/99-asus-numberpad-driver-i2c-dev.rules +sudo rm -f $INSTALL_UDEV_DIR_PATH/rules.d/55-asus-numberpad-driver-i2c-dev.rules if [[ $? != 0 ]]; then echo "Something went wrong when removing the i2c-dev udev rule" fi