Вывести идентификатор устройства из вывода xinput в Linux, соответствующий строке

# array declaration  
arr=()  

#Function to read data from file a and add into array  
fun_add_in_array()
{  
input=$1  
while IFS=',' read -r f1 f2  
do  
    echo "Element1 : $f1"  
    echo "Element2 : $f2"  
    arr+=( "$f1" )  
done < "$input"  
}  

#Function to print a array  
fun_read_array()  
{  
arr=("$@")  
for i in "${arr[@]}"  
do  
    echo $i  
done  
}
0
19.06.2020, 16:32
3 ответа

Вы можете использовать sedдля целей:

xinput | sed '/Touchpad/s/.*id=\([0-9]*\).*/\1/;t;d'

Это заменит все содержимое строк, в которых найден шаблон Touchpad, номером в шаблоне id=digitsза счет использования группы захвата \([0-9]*\), тем самым фактически печатая только часть идентификатора и игнорируя любые не -соответствующие строки (часть ;t;dв конце ).

1
18.03.2021, 23:26

Используйте приведенную ниже единственную команду awk, она будет работать нормально

Проверено, работает нормально

xinput |awk '/Touchpad/{for(i=1;i<=NF;i++){if ($i ~ /id/){print $i}}}' 

выход

id=15
1
18.03.2021, 23:26

Для xinputкоманды, которым требуется устройство аргумент (, как и в --enable device), могут использовать имя или идентификатор устройства.

Например, оба из них были бы эквивалентны:

xinput --enable 'DLL07BE:01 06CB:7A13 Touchpad'
xinput --enable 15

Если вы заранее не знаете полное имя устройства, используйте выходные данные xinput --list --name-onlyдля поиска подходящего имени:

xinput --list --name-only | grep Touchpad
xinput --enable "$(xinput --list --name-only | grep Touchpad | head -n 1)"

Как описано в man 1 xinput, опция --listтакже принимает аргумент устройства. Таким образом, вы можете напечатать идентификатор с именем:

xinput --list --id-only 'DLL07BE:01 06CB:7A13 Touchpad'

или имя с идентификатором:

xinput --list --name-only 15
3
18.03.2021, 23:26

Теги

Похожие вопросы