it-swarm.com.de

Wie kann ich die Einstellungen der xinput-Maus für eine USB-Maus beibehalten?

Ich benutze xinput, um die Einstellungen meiner USB-Maus zu ändern :

xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1

Wie kann ich diese Einstellungen beibehalten, nachdem ich die Maus ausgesteckt oder neu gestartet habe?

5
ændrük

Sie können den Befehl cron eingeben oder zu Ihrem Start hinzufügen, aber keiner von beiden ist besonders elegant. Wenn ich Sie wäre, würde ich dies zu meinen udev-Regeln hinzufügen und das System Ereignisse erkennen und den Befehl bei Bedarf auslösen lassen.

Zuerst benötigen wir den Mausanbieter und Produktstrings. Sie finden diese unter lsusb. Suchen Sie nach Ihrer Maus. Hier ist meine Maus:

Bus 004 Device 012: ID 1532:000f Razer USA, Ltd 

Im Teil 1532:000f ist 1532 der Verkäufer und 000f das Produkt.

Also fügen wir udev eine Regel hinzu. udev-Regeln finden Sie in /lib/udev/rules.d/. Sie können schreiben Sie Ihre eigene oder frech sein und eine andere bearbeiten. Dort gibt es auch ein hilfreiches kleines README, das ich Ihnen empfehlen möchte (cat /lib/udev/rules.d/README).

Unabhängig davon, was Sie tun, möchten Sie eine Regel wie diese hinzufügen. Beachten Sie, dass ich die IDs von früher verwende, damit dies funktioniert.

BUS=="usb", SYSFS{idVendor}=="1532", SYSFS{idProduct}=="000f", ACTION=="add",
RUN+="/usr/bin/xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1"

udev sollte das sofort aufnehmen.

Beachten Sie, dass udev bei der Konfiguration von Geräten selbst ziemlich clevere Dinge tun kann. Möglicherweise benötigen Sie xinput überhaupt nicht. Hier ist ein Beispiel für eine benutzerdefinierte Konfiguration für eine Maus.

7
Oli

Ich kann mir keine andere Lösung vorstellen, als einen kleinen Daemon zu starten, der in regelmäßigen Abständen xinput --list abfragt und einen Befehl ausführt, wenn ein Gerät angeschlossen oder entfernt wird.

Beispielcode:

#! /bin/sh -x
#
# xievd [INTERVAL]
#
# Poll `xinput` device list every INTERVAL seconds (default: 10)
# and run script in ~/.xievd/${device_name}.sh when a device is
# plugged-in (or pulled out).
#
# The device name is the same as given by `xinput --list`, with
# the following transformations applied:
#   * any non-alphanumeric character is deleted (except: space, `_` and `-`)
#   * leading and trailing spaces are removed
#   * any sequence of 1 or more space chars is converted to a single `_`
#

interval=${1:-10}

scripts_dir="$HOME/.xievd"
if [ ! -d "$scripts_dir" ]; then
  echo 1>&2 "xievd: No scripts directory -- exiting."
  exit 1
fi

state_dir="$(mktemp -t -d xievd.XXXXXX)" \
  || { echo 1>&2 "xievd: Cannot create state directory -- exiting."; exit 1; }
trap "rm -rf $state_dir; exit;" TERM QUIT INT ABRT

process_xinput_device_list() {
  touch "${state_dir}/.timestamp"

  # find new devices and run "start" script
  xinput --list --short \
    | fgrep slave \
    | sed -r -e 's/id=[0-9]+.+//;s/[^a-z0-9 _-]//ig;s/^ +//;s/ *$//;s/ +/_/g;' \
    | (while read device; do 
        if [ ! -e "${state_dir}/${device}" ]; then
          # new device, run plug-in script
          [ -x "${scripts_dir}/${device}" ] && "${scripts_dir}/${device}" start
        fi
        touch "${state_dir}/${device}"
      done)

  # find removed devices and run "stop" script
  for d in "$state_dir"/*; do
    if [ "${state_dir}/.timestamp" -nt "$d" ]; then
      # device removed, run "stop" script
      device="$(basename $d)"
      [ -x "${scripts_dir}/${device}" ] && "${scripts_dir}/${device}" stop
      rm -f "$d"
    fi
  done
}

# main loop
while true; do
      process_xinput_device_list
      sleep $interval
      sleep 1
done

# cleanup
rm -rf "$state_dir"

Speichern Sie den obigen Code in einer ausführbaren Datei xievd irgendwo in Ihrem PATH, fügen Sie sie Ihren Startanwendungen hinzu und erstellen Sie dann ein Shell-Skript ~/.xievd/USB_Optical_Mouse:

#! /bin/sh
if [ "$1" = "start" ]; then
  xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
fi
2
Riccardo Murri