如何使 xinput 鼠标设置对于 USB 鼠标保持持久?

如何使 xinput 鼠标设置对于 USB 鼠标保持持久?

xinput习惯更改我的 USB 鼠标的设置

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

拔下鼠标或重新启动后,如何使这些设置持久保留?

答案1

您可以cron执行该命令或将其添加到启动项中,但这两种方法都不太好。如果我是您,我会将其添加到我的 udev 规则中,让系统检测事件并在需要时触发该命令。

首先,我们需要鼠标供应商和产品字符串。您可以通过 找到这些lsusb。查找您的鼠标。这是我的鼠标显示的内容:

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

在部分中1532:000f1532是供应商,000f是产品。

然后我们向 udev 添加一条规则。udev 规则位于/lib/udev/rules.d/。您可以写你自己的或者厚着脸皮编辑另一个。里面还有一个有用的小 README,我建议你仔细阅读一下 ( cat /lib/udev/rules.d/README)。

无论你做什么,你都想添加这样的规则。请注意,我使用之前的 ID 来实现这一点。

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

udev应该立刻拿起来。

注意,udev 在配置设备时可以自己做一些非常聪明的事情。你可能xinput根本不需要。下面是一个例子自定义配置对于一只老鼠。

答案2

我想不到其他解决方案,除了启动一个小守护进程,xinput --list在设备插入或移除时定期轮询并运行命令。

示例代码:

#! /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"

将上述代码保存在xievdPATH 中某个可执行文件中,将其添加到启动应用程序中,然后创建一个 ~/.xievd/USB_Optical_Mouseshell 脚本:

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

相关内容