我有一个轨迹球,即使速度设置为最大,我也需要用拇指划 4 次才能从屏幕的一侧移动到另一侧。我将 xset m 200 1 添加到启动应用程序中,但最近它停止了自动启动。我必须在终端中手动输入此命令。有没有一种不使用这种解决方法来设置此速度的方法?
感谢您的帮助
答案1
不是一个“有没有不用这个解决方法就能设定这个速度的方法?”– 答案。但也许会有所帮助。您可能找到了 @RickGreen-Turbo 的解决方案评论链接,但要添加一些。
识别鼠标的使用:
$ xinput list
# or
$ xinput --list --short
# 应该会给你类似这样的信息: ⎡ 虚拟核心指针id=2[主指针(3)] ⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从属指针 (2)] ⎜ ↳ Logitech USB-PS/2 光电鼠标 id=8 [从属指针 (2)] ⎣ 虚拟核心键盘id=3[主键盘(2)] ↳ 虚拟核心 XTEST 键盘 id=5 [从属键盘 (3)] ↳ 电源按钮 id=6 [从属键盘 (3)] ↳ 电源按钮 id=7 [从属键盘 (3)] ↳ AT 翻译设置 2 键盘 id=9 [从属键盘 (3)] ↳ HP WMI 热键 id=10 [从属键盘 (3)]
在你的情况下它可能是这样的Logitech USB Trackball
。
要列出当前设置,请说:
xinput --list-props [<id_number> | "String Identifier"]
例如(就我的情况而言):
$ xinput --list-props 8
Or
$ xinput --list-props "Logitech USB-PS/2 Optical Mouse"
我不确定,但我的猜测是,ID可以在靴子之间更换。正如这里所述:
“id 是一个 0-128 范围内的数字,用于唯一标识设备。它在服务器初始化设备时分配给设备。
因此在脚本中,修改时,使用字符串变体。(也许这就是您的旧配置的错误之处?)
对我来说结果是:
设备‘Logitech USB-PS/2 光电鼠标’: 设备已启用(132):1 坐标变换矩阵(134):1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 设备加速配置文件 (261): 0 设备加速度恒定减速度(262):1.000000 设备加速度自适应减速(263):1.000000 设备加速度速度缩放(264):10.000000 设备产品 ID (251):1133, 49181 设备节点(252):“/dev/input/event3” Evdev 轴反转(265):0, 0 Evdev 轴交换 (267): 0 轴标签 (268):“相对 X”(142)、“相对 Y”(143)、“相对垂直轮”(260) 按钮标签 (269):“按钮左”(135)、“按钮中”(136)、“按钮右”(137)、“按钮滚轮向上”(138)、“按钮滚轮向下”(139)、“按钮水平滚轮向左”(140)、“按钮水平滚轮向右”(141)、“按钮侧面”(255)、“按钮额外”(256)、“按钮前进”(257)、“按钮后退”(258)、“按钮任务”(259)、“按钮未知”(254)、“按钮未知”(254)、“按钮未知”(254)、“按钮未知”(254) Evdev 中间按钮模拟 (270): 0 Evdev 中键超时 (271):50 Evdev 第三按钮模拟 (272): 0 Evdev 第三个按钮模拟超时 (273):1000 Evdev 第三个按钮模拟按钮 (274):3 Evdev 第三个按钮模拟阈值(275):20 Evdev 车轮模拟 (276): 0 Evdev 车轮模拟轴 (277): 0, 0, 4, 5 Evdev 车轮模拟惯性(278):10 Evdev 车轮模拟超时 (279):200 Evdev 方向盘模拟按钮 (280):4 Evdev 拖拽锁定按钮 (281): 0
找到您想要更改的值并将其添加到启动脚本。
例如用于测试:
$ xinput --set-prop 8 "Device Accel Velocity Scaling" 50
$ xinput --set-prop 8 "Device Accel Constant Deceleration" 1.5
(相关) 属性:
- 设备加速自适应减速
- 设备加速恒定减速
- 设备加速配置文件
- 设备加速度速度缩放
是记录在这里。(如果您需要,请浏览同一页面以获取更多信息。)
在文件中添加适用于鼠标的 hack,并将其保存到例如~/.bin/my_mouse_hack
例如:
#!/bin/bash
xinput --set-prop "Logitech USB Trackball" "Device Accel Velocity Scaling" 75
xinput --set-prop "Logitech USB Trackball" "Device Accel Constant Deceleration" 1.5
使其可执行:
$ chmod 700 ~/.bin/my_mouse_hack
现在:将其设置为在启动时运行。将其添加到.bash_profile
所述这里。 (我正忙于工作、编码、编译等,所以我现在不会测试这个。但我稍后会测试并更新答案。)
或者通过选择“添加”来添加它(如果您使用 GNOME):
Alt+F2 gnome-session-properties
Enter。
或者通过 X11 配置或类似配置。
编辑 1:暂停怪癖
发现您在暂停后恢复时遇到了一些问题。
当计算机进入或恢复挂起/休眠模式时,它会运行位于/etc/pm/sleep.d
和的脚本/usr/lib/pm-utils/sleep.d
。人为行动。
当向下运行时,脚本使用参数suspend
或运行hibernate
,当恢复时,参数分别是resume
和thaw
– 即:在你的脚本中,$1 是以下四个之一。
据我所知,这些目录中的脚本(又名"hooks"
)分为两类。
/usr/lib/pm-utils/sleep.d Distribution / package provided hooks
/etc/pm/sleep.d Administrator provided hooks
另外,如果你想禁用驻留在中的脚本,请在中创建一个具有相同名称的/usr/lib/pm-utils/sleep.d
空文件,然后/etc/pm/sleep.d
不使其可执行。
最后要提到的文件是/var/log/pm-suspend.log
。此文件包含有关上次挂起/休眠和恢复/解冻的信息 - 按照惯例,这是添加您自己的日志的好地方。它也是查找错误的好地方。如果脚本失败,应该在此处记录。
一个简单的脚本01_test
:
#!/bin/bash
ts=$(date)
case "$1" in
"hibernate"|"suspend")
printf "; %s: going down by \`%s'\n" "$ts" "$1" >> /var/log/pm-suspend.log
;;
"resume"|"thaw")
printf "; %s: waking up by \`%s'\n" "$ts" "$1" >> /var/log/pm-suspend.log
;;
esac
然后
$ sudo chmod 755 /etc/pm/sleep.d/01_test
挂起并唤醒,cat log 查看:
$ cat /var/log/pm-suspend.log
; Sun Jan 13 06:38:14 CET 2013: going down by `suspend'.
...
; Sun Jan 13 06:38:19 CET 2013: waking up by `resume'.
好的。这样就行了。现在你想要的是设置鼠标xset
等。你可能会认为,像这样的一行
xset m 14/1 1
在脚本中/etc/pm/sleep.d
就足够了,但如果你尝试(尝试一下也无妨),你会在日志文件中看到一些错误。至少有两个问题。1:xset
需要display
2:root 很可能没有 Xsession。
为了解决这个问题,可以通过添加如下行来指定用户环境等:
su YOUR_USERNAME -c "xset -display :0 m 14/1 1"
但因为这是一个全局脚本,所以可能会做得更复杂一些。此脚本检查已登录且显示为 :0 的用户,检查他们是否在/home/user/bin/
命名中有一个可执行文件.resume
;如果有,则执行该文件01_user_resume
:
#!/bin/bash
# Time(stamp)
ts=$(date)
# Log file
log="/var/log/pm-suspend.log"
# Array of Users
# Users (finger/who/w ... etc)
# Having Xsession (:0)
# Unique
declare -a users=($(/usr/bin/finger | \
/bin/grep ':0'| \
/bin/grep -o '^\w*' | \
/usr/bin/uniq))
# Array of scritps to look for (using array as it is easy to extend)
declare -a user_scripts_resume=(".resume")
# Run resume script fo all users with X session
run_user_scripts_resume()
{
local user # Each user
local home # Users home
local scr # Script to check for and run
for user in "${users[@]}"; do
printf ";; For User: %s.\n" "$user" >> "$log"
# Identify users home directory
home=$(/usr/bin/getent passwd "$user" | cut -d: -f6)
# If user has a file called $HOME/bin/<sctipt> and it is
# executable then run it
for scr in "${user_scripts_resume[@]}"; do
if [ -f "$home/bin/$scr" ] && [ -x "$home/bin/$scr" ]; then
printf ";; Executing: $home/bin/$scr\n" >> "$log"
# DISPLAY is needed by e.g. xset
/bin/su "$user" -c "export DISPLAY=:0; $home/bin/.resume"
fi
done
done
}
case "$1" in
"hibernate"|"suspend")
printf "; %s: going down by \`%s'.\n" "$ts" "$1" >> "$log"
# Nothing to do
;;
"resume"|"thaw")
printf "; %s: waking up by \`%s'.\n" "$ts" "$1" >> "$log"
printf "; Executing User resume scripts.\n" >> "$log"
run_user_scripts_resume
;;
esac
所以:
- 将该脚本添加到文件中
/etc/pm/sleep.d/01_user_resume
。 - 使其可执行:
sudo chmod 755 /etc/pm/sleep.d/01_user_resume
在你的主目录中创建文件bin/.resume
- 并添加例如(呃参见下面的编辑2):
#!bin/bash
sleep 3 # See note on EDIT 2: below
xset m 15/1 1
使其可执行:chmod 700 bin/.resume
或者,更好的是,使用相同的脚本进行启动和恢复 - 也就是重新运行您用于在启动时设置鼠标的脚本。
暂停并恢复。通过以下方式检查设置是否已更改:
xset q
# or
xset q | grep -A 1 Pointer
编辑 2:鼠标移动
测试这个似乎还有另一个问题。该xset q | grep -A 1 Pointer
命令显示设置已更改,问题是一旦使用鼠标 - 它就会恢复。对我来说,这是通过在脚本中添加sleep 1
之前解决的。您可能希望使用更长的睡眠时间以确保万无一失。xset
.resume
根据日志文件,已进行更改以便最后执行脚本,但这没有帮助 - 可能是因为脚本似乎是在子 shell 中执行的 - 因此在执行最后一个脚本后,早期脚本中的某些进程可能会执行。
答案2
为了解决暂停/恢复问题,我最终求助于使用 crontab:
$ crontab -e
* * * * * DISPLAY=:0 xset m 2 2
我知道它并不漂亮,但它确实有效。