Saturday, September 9, 2023

Kensington Expert Mouse Linux config

#!/bin/bash
# 

LEFT_HANDED=""

show_help() {
  echo "Usage: [--left]"
  echo "--left = use lefthanded config"
  exit 1
}

parse_args() {
while [[ $# -gt 0 ]]; do
  case $1 in
    --left)
      LEFT_HANDED="yes"
      shift
      ;;
    *)
      show_help
      ;;
  esac
done
}

parse_args $@

MOUSE_NAME="Kensington Expert Mouse"
CHECK=$(xinput | grep "$MOUSE_NAME")

set -e

echo "check=$CHECK"

if [[ -z "$CHECK" ]]; then
    echo "Cannot find the device: $MOUSE_NAME"
    exit 1
fi

TRACKBALL_ID=$(xinput | grep "$MOUSE_NAME" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')

LEFT_TOP=2
LEFT_BOTTOM=1
RIGHT_TOP=8
RIGHT_BOTTOM=3
SCROLL_CLOCKWISE=5
SCROLL_COUNTERCW=4

# LB, LT, RB, SCCW, SCW, 6, 7, RT

MOUSE_LEFT=1
MOUSE_MIDDLE=2
MOUSE_RIGHT=3

# ---

# make scrolling with the ball smooth
SCROLLING_PIXEL_DISTANCE=50

# X clients receive events with logical button numbers, where 1, 2, 3 are usually interpreted as left, middle, right and logical buttons 4, 5, 6, 7 are usually interpreted as scroll up, down, left, right. The fourth and fifth physical buttons on a device will thus send logical buttons 8 and 9. The ButtonMapping option adjusts the logical button mapping, it does not affect how a physical button is mapped to a logical button.

if [[ -n $LEFT_HANDED ]]; then
    echo "using lefthanded config"
    SCROLLING_BUTTON=$RIGHT_TOP
    # LB, LT, RB, SCCW, SCW, 6, 7, RT
    BUTTON_MAP="$MOUSE_MIDDLE $MOUSE_RIGHT $MOUSE_LEFT 4 5 6 7 8"
else
    # right hand settings
    SCROLLING_BUTTON=$LEFT_TOP
    # LB, LT, RB, SCCW, SCW, 6, 7, RT
    BUTTON_MAP="$MOUSE_LEFT 8 $MOUSE_MIDDLE 4 5 6 7 $MOUSE_RIGHT"
fi

# -------
xinput set-prop $TRACKBALL_ID "libinput Scrolling Pixel Distance" $SCROLLING_PIXEL_DISTANCE
xinput set-prop $TRACKBALL_ID "libinput Button Scrolling Button" $SCROLLING_BUTTON
xinput set-prop $TRACKBALL_ID "libinput Scroll Method Enabled" 0, 0, 1
xinput set-button-map $TRACKBALL_ID 1 2 3 4 5 6 7 8 9
echo $BUTTON_MAP
xinput set-button-map $TRACKBALL_ID $BUTTON_MAP

Monday, July 24, 2023

BIOS update from Linux for Lenovo Thinkbook 13s g2 itl

You need to download intel ME driver, BIOS and ME firmware update installers: https://pcsupport.lenovo.com/lt/en/products/laptops-and-netbooks/thinkbook-series/thinkbook-13s-g2-itl 

Download windows 10 iso: https://www.microsoft.com/en-us/software-download/windows10ISO

Then you need wine to run those installers in Wine, select "Extract only". Then the installers and firmware apps need to be overlaid on the winpe.iso, which is made from the win10 iso as described there:

https://wiki.archlinux.org/title/Windows_PE

Then you mount winpe.iso and copy all the files to the FAT32 root partition on the USB flash. Copy EFI folder from the original Win10 iso.

After booting to USB flash drive (ENTER, F12) you go to firmware update directory and run respective ...Flash/install.bat

Then you need to enter BIOS Setup (ENTER, F1), and "Load Optimized Defaults".

After that you can update ME firmware the same way, booting from the USB, "...Flash/MEUpdate.bat"