Як я можу переключити тачпад залежно від того, підключена миша?


10

Я хочу, щоб моя тачпад відключилася автоматично, коли підключена зовнішня миша та увімкнена, коли її немає. Я спробував використовувати, touchpad-indicatorале це не вдається у випадках, коли комп’ютер увійшов у режим сну з підключеною мишкою і прокинувся, коли миша відключена.

Я намагався зробити такий сценарій у демон, щоб вирішити цю проблему, але я не можу змусити його працювати:

#!/bin/bash

declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
    xinput disable $TID
else
    xinput enable $TID
fi

я намагався start-stop-daemon -S -x ./myscript.sh -b

і setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &

і nohup ./myscript 0<&- &>/dev/null & навіть./myscript.sh &

Усі вони повертають деякий 4-значний номер, який, мабуть, повинен бути PID запущеного процесу, але коли я запускаю lxtask , з цим PID не виникає процесів , навіть якщо я поставив галочку "переглянути всі процеси". І, звичайно, це не працює!


@terdon Im намагається зробити демон перегляду підключеної usb миші та попросити xinput включити або вимкнути тачпад. Єдине інше рішення проблеми, програма під назвою тачпад-індикатор, має невеликий недолік. Коли я відчуваю, як мій ноутбук спить із підключеною мишкою, і прокидаюсь без нього, мені доведеться шукати найближчу мишу, щоб підключити / відключити її, щоб мій тачпад був включений. Коротше кажучи, я хочу, щоб той факт був повторно перевірений під час пробудження.
mekkanizer

Ласкаво просимо в Ask Ubuntu! Будь ласка, відредагуйте своє запитання, щоб додати додаткову інформацію, важко читати і легко пропустити коментарі.
тердон

Перш за все, вам слід пояснити, що ви "намагаєтесь це визначити" і як саме ви це робите. Тоді xinputпотрібен запущений X-сервер, і більшість методів запуску матеріалів як демони не знають і не здатні підключатися до X. По-третє, і головна причина, чому ви завжди повинні пояснювати, що ви намагаєтеся зробити, - це те, що дуже часто рішення що хтось намагається подати заявку - це насправді не спосіб її виконати, і ви в кінцевому підсумку задаєте неправильне запитання, загальновідоме як проблема XY .
тердон

@terdon Назад до пошуку рішень, що таке (можливий?) аналог xinput, який: 1. Може працювати у фоновому режимі 2. Чи можна вмикати / вимикати пристрої?
mekkanizer

1
коментарі видалені . Бути приємним у Ask Ubuntu - необов’язково. Будь ласка, приємно. Грубі коментарі будуть видалені без попередження.
Сет

Відповіді:


10

Основний сценарій, який вам потрібен, є просто:

#!/usr/bin/env bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    ## wait one second to avoind spamming your CPU
    sleep 1
done

Сценарій вище буде перемикати трекпад залежно від того, підключена миша. Після запуску він працюватиме назавжди і перевірятиме мишу щосекунди, відключаючи або вмикаючи тачпад відповідно.

Тепер збережіть сценарій як ~/touchpad.sh, зробіть його виконуваним ( chmod +x ~/touchpad.sh) та додайте його до ваших програм запуску сеансу GUI. Ви не вказали, яке середовище робочого столу ви використовуєте, але оскільки ви згадали lxtask, я вважаю, що ви використовуєте LXDE. У будь-якому випадку, тут описується для обох LXDEі Unity:

  1. Додайте скрипт до файлів автозапуску LXDE

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file

    Переконайтеся , що ви заміните «ПРОФІЛЬ» з фактичним ім'ям вашого профілю LXDE , ви можете дізнатися, що це, запустивши ls ~/.config/lxsession/.

  2. Додайте скрипт до файлів автозапуску Unity

    Відкрити Startup Applications(пошук на інформаційній панелі для "запуску")

    введіть тут опис зображення

    Клацніть на "Додати" та вставте шлях до сценарію в командному полі:

    введіть тут опис зображення


Я не використовував цикл, тому що, коли я переглядав запуск сценаріїв у фоновому режимі, всі пропонували не використовувати цикли. Якщо це єдине рішення, і немає аналога xinput, який МОЖЕ бути використаний у скрипті для демон та МОЖУТЬ увімкнути / вимкнути пристрої ... Ок, я буду використовувати його.
mekkanizer

1
@mekkanizer - це насправді не найкращий спосіб. Набагато більш чистим способом було б використання правил udev та експорт необхідних X облікових даних до них. Ви можете заглянути в це, якщо хочете.
тердон

Спасибі, зробимо. Якщо я
змушу

10

Гаразд, я створив для нього правило udev, і це, як сказав @terdon, набагато чистіший спосіб

Отже, завдяки цьому посібнику я створив файл "touchpad_toggle.rules" у /etc/udev/rules.d/ (вимагає кореневого доступу) і заповнив його двома рядками:

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"

Не забудьте замінити "ім'я користувача" на ваше ім'я користувача!

Вміст цих скриптів оболонки включення та виключення - це лише кастрована версія сценарію в моєму запитанні. Приклад - off.sh:

#!/bin/bash

declare -i TID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
xinput disable $TID

Вам доведеться використовувати xinput enable $ TID в on.sh

І не забудьте додати сценарій у моє запитання (або той, який @terdon запропонував, але без циклу), щоб автозапустити сеанс, як він вам сказав у своїй відповіді.

Це все, але я мушу додати одне:

Якщо у вас є сенсорна панель Synaptics (у мене є Elantech, тому мені це не підходить), ви можете замінити свої сценарії (шляхи, до яких ви пишете після RUN + =), простою командою /usr/bin/synclient TouchpadOff=0та 1 відповідно


просто нитпик, оскільки вам потрібен кореневий доступ для створення udevправила будь-яким способом, можливо, краще зберегти файл де-небудь, крім домашнього каталогу. Наприклад: /usr/local/binабо /opt/touchpad-toggle/bin/.
Ден

@Dan відмовився. Все, що стосується налаштувань користувачів, краще знаходитись у домашньому каталозі. На жаль, правила udev, настройки менеджера входу в систему і кілька інших речей , які приречені бути скопійовані назад в / * кожен раз , коли ви брухту / розділ, якщо не відновити знімок звичайно. Тож мати більше речей, що зберігаються в / вдома /, це просто зручність. Отже, ваша порада не має значення
mekkanizer

Але оскільки він доданий як правило udev, чи не означає це, що він працює для будь-якого користувача, незалежно від того, хто його ввійшов?
Ден

Я не перевіряв, як ніколи не використовував Linux на спільних ПК. У будь-якому разі мене не цікавить будь-який користувач, якого дратує це акуратне правило udev. Якщо вони настільки чутливі, вони можуть отримати власну установку
mekkanizer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.