27

G700 マウスをコンピュータに接続しています。Linux (Ubuntu) でのこのマウスの問題は、感度が非常に高いことです。また、マウスの加速も好きではないので、これをオフにするスクリプトを作成しました。スクリプトは次のようになります

#!/bin/bash
# This script removes mouse acceleration, and lowers pointer speed
# Suitable for gaming mice, I use the Logitech G700.
# More info: http://www.x.org/wiki/Development/Documentation/PointerAcceleration/
xinput set-prop 11 'Device Accel Profile' -1
xinput set-prop 11 'Device Accel Constant Deceleration' 2.5
xinput set-prop 11 'Device Accel Velocity Scaling' 1.0
xinput set-prop 12 'Device Accel Profile' -1
xinput set-prop 12 'Device Accel Constant Deceleration' 2.5
xinput set-prop 12 'Device Accel Velocity Scaling' 1.0

G700 マウスのもう 1 つの問題は、xinput で 2 つの異なるデバイスとして表示されることです。これは、マウスにワイヤレス アダプターがあり、通常は USB ケーブル (充電用) を介して接続されているためと考えられます。これは私の出力ですxinput --list(ID 11と12を参照):

$ xinput --list
⎡ Virtual core pointer                              id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                    id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                         id=8    [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                         id=9    [slave  pointer  (2)]
⎜   ↳ Logitech Unifying Device. Wireless PID:4003   id=10   [slave  pointer  (2)]
⎜   ↳ Logitech G700 Laser Mouse                     id=11   [slave  pointer  (2)]
⎜   ↳ Logitech G700 Laser Mouse                     id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                             id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                   id=5    [slave  keyboard (3)]
    ↳ Power Button                                  id=6    [slave  keyboard (3)]
    ↳ Power Button                                  id=7    [slave  keyboard (3)]

通常、ID は同じであるため、これは通常は問題になりません。しかし、マウスの ID が変更されることがあり、それが私の質問の出番です。

Logitech G700 Laser Mouseからの出力で指定された 2 つのリストに属する ID を検索し、xinput --listそれらの 2 つの ID を使用してトップ スクリプトでコマンドを実行するスクリプト/プログラムを作成する最も簡単な方法は何ですか?

4

7 に答える 7

7

Logitech Gaming Mouse G502 の私の 2 セント

#!/bin/sh


for id in `xinput --list|grep 'Logitech Gaming Mouse G502'|perl -ne 'while (m/id=(\d+)/g){print "$1\n";}'`; do
    # echo "setting device ID $id"
    notify-send -t 50000  'Mouse fixed'
    xinput set-prop $id "Device Accel Velocity Scaling" 1
    xinput set-prop $id "Device Accel Constant Deceleration" 3
done 
于 2016-10-01T09:06:47.240 に答える
3

私は Raphael Ahrens の回答のようにそれを行いましたが、awk の代わりに grep と sed を使用し、コマンドは my_script part_of_device_name part_of_property_name_(spaces with \space) 値のようなものになりました:

#!/bin/sh

DEVICE=$1
PROP=$2
VAL=$3

DEFAULT="Default"

if [ "$DEVICE" = "" ]; then 
    exit 1
fi

if [ "$PROP" = "" ]; then 
    exit 1
fi

if [ "$VAL" = "" ]; then 
    exit 1
fi

devlist=$(xinput --list | grep "$DEVICE" | sed -n 's/.*id=\([0-9]\+\).*/\1/p')

for dev in $devlist
do
    props=$(xinput list-props $dev | grep "$PROP" | grep -v $DEFAULT | sed -n 's/.*(\([0-9]\+\)).*/\1/p')

    for prop in $props
    do
        echo $prop
        xinput set-prop $dev $prop $VAL 
    done 
done
于 2016-11-23T17:55:21.317 に答える
1

現在、 askubuntu.com で質問のスクリプトに取り組んでいますが、これには似たようなものが必要です。この質問が求めることのほとんどを実行する単純な python スクリプトを共有すると思いました - デバイス ID を見つけてプロパティを設定します。

スクリプト

from __future__ import print_function
import subprocess
import sys

def run_cmd(cmdlist):
    """ Reusable function for running shell commands"""
    try:
        stdout = subprocess.check_output(cmdlist)
    except subprocess.CalledProcessError as pserror:
        sys.exit(1)
    else:
        if stdout:
            return stdout.decode().strip()

def list_ids(mouse_name):
    """ Returns list of ids for the same device"""
    while True:
        mouse_ids = []
        for dev_id in run_cmd(['xinput','list','--id-only']).split('\n'):
            if mouse_name in run_cmd(['xinput','list','--name-only',dev_id]):
                mouse_ids.append(dev_id)
        if mouse_ids:
           break
    return mouse_ids

"""dictionary of propery-value pairs"""
props = { 'Device Accel Profile':'-1',
          'Device Accel Constant Deceleration':'2.5',
          'Device Accel Velocity Scaling':'1.0'   }

""" set all property-value pair per each device id
    Uncomment the print function if you wish to know
    which ids have been altered for double-checking
    with xinput list-props"""
for dev_id in list_ids(sys.argv[1]):
    # print(dev_id)
    for prop,value in props.items():
        run_cmd(['xinput','set-prop',dev_id,prop,value]) 

使用法

最初のコマンド ライン引数として、引用符で囲んだマウスの名前を指定します。

python set_xinput_props.py 'Logitech G700 Laser Mouse'

すべてが OK である場合、スクリプトは終了ステータス で0、または1いずれかのxinputコマンドが失敗した場合に、サイレントに終了します。ステートメントのコメントを外しprintて、構成されているIDを表示できます(後でxinput値が正しく設定されていることを再確認するため)

使い方:

基本的に、list_ids関数はすべてのデバイス ID をリストし、ユーザーのマウス名と同じ名前を持つデバイスを見つけて、それらの ID のリストを返します。次に、それらのそれぞれを単純にループし、props辞書で定義されているすべてのプロパティと値のペアをそれぞれに設定します。タプルのリストでも実行できますが、ここでは辞書を選択します。

于 2016-08-06T05:09:30.247 に答える
0

更新: ポインターまたはキーボードをプレフィックスとしてデバイス名に追加します。

LINUX:~$ xinput --set-prop "ロジクール MX マスター 2S" 157 5 0 0 0 5 0 0 0 1

警告: 「Logitech MX Master 2S」に一致するデバイスが複数あります。正しいものが選択されていることを確認するには、デバイス ID を使用するか、デバイス名の前に適切な「pointer:」または「keyboard:」を付けてください。

デバイス ポインタが見つかりません

#解決

LINUX:~$ xinput --set-prop "pointer:Logitech MX Master 2S" 157 5 0 0 0 5 0 0 0 1

于 2021-07-20T15:36:30.703 に答える