LINUX.ORG.RU

Автоотключение мыши


0

1

Доброго времени суток. Проблема странная и наверняка решается легко при наличии соответствующих знаний. Поиск в гугле результатов не дал. Проблема следующая: мышь деактивируется (засыпает, перестает реагировать на движения) через несколько секунд ее не активности. Вернуть ее можно нажатием на любую кнопку, но опять же на несколько секунд. Пока мышь двигается, она не отключается, но если не трогать ее секунды 2-3, то она выключается.

ОС: Gentoo linux

Проблема странная, потому что неделю назад на этом же ноуте с этой же мышкой стоял этот же Gentoo и все работало, потом снес генту, поставил Arch linux, все работало без проблем, а сейчас решил вернуть генту и вот тебе на... Сначала грешил на gpm, потому что для него вроде как это поведение является нормальным (исчезновение курсора после недолгой неактивности), и в прошлый раз, когда стоял генту, я не использовал gpm. Снес его, не помогло. udev пересобирал, xorg (кстати он версии 1.8) и evdev тоже пересобирал. В конфигурации ядра отключил PS/2, да и вообще все дрова для мышки, оставил только event и HID. Мышка USB A4Tech XL-740K. Если у кого есть мысли, буду рад выслушать.


Загляните в lsusb и найдите там свою мышу, после этого, зная ее BusID и DevID, без труда отыщите ее в /sys/bus/usb/devices.
Там посмотрите, что за значение стоит в power/control. Если auto, то поменяйте на on и думайте, кто мог его установить туда(powertop, pm-powersave, etc).

cchr
()
Ответ на: комментарий от cchr

Спасибо, сегодня после работы попробую.

biggun
() автор топика
Ответ на: комментарий от cchr

Попробовал. Нашел файлик, поменял значение на on, перестала уходить в сон мышка. Но при перезагрузке нужно снова это проделывать. Если выдернуть вставить из юсб мышку, то тоже сбрасывается файлик, это навело на мысль что udev сам и прописывает эти значения. В подтверждение этого факта может выступать следующее: при старте системы мышка загорается и горит приблизительно пока не загружается udev, как строчка что он загрузился появляется мышка гаснет. Как варианты решения проблемы вижу два:

1. В интернете нарыл правило для udev (http://www.thinkpad-forum.de/software/linux/67929-2-6-30-maus-usb-autosuspend...), в котором можно прописать данные об устройствах, для которых будет отключаться autosuspend. Но этот вариант не очень нравится из-за того, что если подключить другую мышку, то нужно будет редактировать правило.

2. Отключить в ядре suspend для всех юсб устройств. Этот вариант не нравится тем, что придется отказаться от одной из функций энергосбережения.

Есть ли другие варианты заставить udev отключать autosuspend для input устройств?

Установка генту свежая, никаких утилит для контроля питания (powertop, pm-powersave, laptop-mode и др.) еще не ставил, даже acpid еще нет (может стоит поставить как вариант решения проблемы?). В прошлый раз проблемы с мышкой небыло потому что опция suspend для всех USB устройств в ядре была выключена.

biggun
() автор топика
Ответ на: комментарий от biggun

Выставляет значение, конечно, не udev, он просто подгружает драйвер usbшный. Поэтому мышка и горит, пока он не загрузился. Попробуйте такое правило, оно у меня работает, но у меня мышка беспроводная поэтому пришлось добавить строчку про ресивер:

ACTION=="add", SUBSYSTEM=="input", ENV{ID_CLASS}=="mouse", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{product}=="USB Receiver", ATTR{power/control}="auto"
Вам она может не понадобиться. Если не будет работать, киньте лог udevadm monitor --udev --property при втыкании/вытыкании мыши.

cchr
()
Ответ на: комментарий от cchr

Спасибо, вечером попробую и отпишусь.

biggun
() автор топика
Ответ на: комментарий от cchr

П.С. А у вас мышка работает а параметром power/control = auto? Если так, значит проблема у меня в мышке, которая неверно реагирует на комманды драйвера, связанные с энергосбережением?

biggun
() автор топика
Ответ на: комментарий от biggun

Работает с power/control = on. Если выставить auto, то она тоже периодически «засыпает». Как оно и должно быть.

cchr
()
Ответ на: комментарий от cchr

Мысль здравая. Попробовал, поэксперементировал... В итоге получилось достичь желаемого эффекта только с использованием следющей строки:

ACTION=="add", SUBSYSTEM=="usb", ATTR{power/control}="on"
что, как я понимаю, равносильно отключению этой опции в ядре :(

С вашей строкой, и даже с такой строкой:

ACTION=="add", SUBSYSTEM=="input", ATTR{power/control}="on"
результата нет.

Проведя небольшое исследование вывода предложенной вам комманды, обнаружил несколько событий при подключении мышки. Есть события и с SUBSYSTEM==«input», но реакция на них не дает желаемого результата. Что же касается событий с SUBSYSTEM==«usb», реакция на любое из них ведет к желаемому результату. Т.е. если к работающей строке добавить условие, уникальное только для одного из событий с SUBSYSTEM==«usb», то мышка спать не уходит. Т.е. нет разницы, реагировать на каждое из них, или на какое-то одно. Но проблема в том, что в параметрах этих событий нет намеков на то, что подключена мышка, устройство ввода или HID-устройство. Все намеки на это есть только в событиях с другой SUBSYSTEM, реакция на которые не дает нужного эффекта. Т.е. что-бы создать привило отключения сна для моей мышки, а не для всех юсб устройств, мне нужно явно указывать модель, или хотя бы производителя, например так:

ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR}==A4Tech, ATTR{power/control}="on"
Недостаток такого подхода в том, что мышка другого производителя этому правиду не подчинится. Как вариант решения вижу реакцию на событие с SUBSYSTEM==«input», но вместо задания атрибута вызывать скрипт, который должен нахдить соотв. устройство и напрямую редактировать файл power/control. Но в душе надеюсь, что этого удастся избежать и получится все сделать силами udev.

П.С. Только что нашел подходящее решение. В одном из событий с SUBSYSTEM==«usb», есть параметр

DEVNAME=/dev/usb/hiddev0

Таким образом следующее правило с реакцией на это событие отключит сон для всех (по идее) USB HID устройств:

ACTION=="add", SUBSYSTEM=="usb", DEVNAME=="/dev/usb/hiddev*", ATTR{power/control}="on"

Получается что проблема решена. Не думаю, что это подойдет для любой ситуации, но думаю что это максимально общее правило, которое будет работать для моей мышки. Если у вас есть идеи как сделать его еще более общим, буду рад выслушать. Но мне кажется что более общим его можно сделать только расширив новыми строчками вроде ваших. Т.е. для каждого конкретного случая, если он не попал под одно из предидущих правил, нужно будет добавить строчку, что на данном этапе мне не нужно.

Спасибо большое за идею с power/control и коммандой для мониторинга событий udev. Фактически ваши рекомендации и решили проблему.

В дополнение хотел выложить вывод комманды udevadm monitor --udev --property, но пишет что слишком большое сообщение, а куда в интернете выкладывать логи я не знаю. Если подскажете сайтик, выложу.

biggun
() автор топика
Ответ на: комментарий от cchr

К сожаленю оказалось, что приведенное мной правило не работает как хотелось бы. На самом деле udev не знает такого параметра как DEVNAME, поэтому просто его игнорирует, а значит вырубается энергесбережение всех usb устройств. Привильно будет указывать ENV{DEVNAME}, но так почему-то не работает, хотя если вызывать скипт, который выводит файл значение этого параметра, то выводится верное значение. Возможно этот параметр обретает свое значение после выполнения правила при передаче его скрипту... В общем все еще в поисках решения.

Привожу логи при включении мышки: http://pastebin.com/JTct97Eq

и при выключении: http://pastebin.com/ynWQit6Q

biggun
() автор топика
Ответ на: комментарий от biggun

Путем исполнения следующего правила:

ACTION=="add", SUBSYSTEM=="usb", ENV{DEVNAME}=="usb/hiddev*", \
ENV{tmp}="$env{DEVNAME}", RUN+="/home/biggun/scripts/write_to_file.sh '$env{tmp} ---> $env{DEVNAME}'", \
ATTR{power/control}="on"
выяснилось, что обработка этого события не дает результата. При чем имя устройства, передающееся скрипту и присутствующее в правиле разные. Вывод скрипта write_to_file.sh (скрипт просто выводит в файл полученный параметр):
usb/hiddev0 ---> /dev/usb/hiddev0
Это показывает что правило срабатывает именно для того события, на которое я так надеялся. Но мышка все-равно уходит в «сон». Значит нужно работать с одним из 3-х другик с SUBSYSTEM=«usb». А вот у них, к сожалению, пока не смог найти параметров, которыми можно было бы описвть класс устройсва. Не хотелось бы забивать свою модель или производителя.

Опять стал задумываться о написании shell скрипта... Но надежда решить все только силами udev еще не окончательно умерла.

biggun
() автор топика
Ответ на: комментарий от biggun

Посмотрел лог. Ваша проблема в следующем: у вас создается три устройства 3-1, 3-1:1.0 и 3-1:1.1.
Причем последние два исправно отсеиваются по параметрам SUBSYSTEM=«hid» и SUBSYSTEM=«input».
Можете убедиться в этом, используя, например, такое правило

ACTION=="add", SUBSYSTEM=="input", ATTR{power/control}="on"
и прочитав power/control из 3-1:1.0 и 3-1:1.1. А вот первое такими свойствами не обладает соответственно вам нужно сделать правило которое будет устанавливать для него power/control. То есть реально вам нужно «попасть» в это событие:
UDEV  [1283451082.228928] add      /devices/pci0000:00/0000:00:1a.0/usb3/3-1 (usb)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb3/3-1
SUBSYSTEM=usb
DEVNAME=/dev/bus/usb/003/046
DEVTYPE=usb_device
PRODUCT=9da/8090/606
TYPE=0/0/0
BUSNUM=003
DEVNUM=046
SEQNUM=2568
ID_VENDOR=A4Tech
ID_VENDOR_ENC=A4Tech
ID_VENDOR_ID=09da
ID_MODEL=USB_Full_Speed
ID_MODEL_ENC=USB\x20Full\x20Speed
ID_MODEL_ID=8090
ID_REVISION=0606
ID_SERIAL=A4Tech_USB_Full_Speed
ID_BUS=usb
ID_USB_INTERFACES=:030102:030101:
MAJOR=189
MINOR=301
DEVLINKS=/dev/char/189:301
А это я пока не придумал как сделать. P.S. в арче такой проблемы нет. автосуспенд врублен в ядре.

cchr
()
Ответ на: комментарий от biggun

Вроде нашел решение. 2-й раз :) Оказалось, что нужно было всего чуть-чуть изменить предложенную вами строку. Но пока я до этого дошел, понял и узнал много интеречных вещей. Вот за что я люблю линукс в целом и генту в частности.

Работающее правило (по крайней мере, пока я так думаю :):

ACTION=="add", SUBSYSTEM=="input", ENV{ID_TYPE}="hid", ATTR{device/power/control}="on"

Большое спасибо за помощь.

biggun
() автор топика
Ответ на: комментарий от cchr

Только что заметил, что мой комментарий предыдущий совпал секунда в секунду с вашим :) Пока полет нормальный, думаю этот вариант будет окончательным.

ACTION=="add", SUBSYSTEM=="input", ENV{ID_TYPE}="hid", ATTR{device/power/control}="on"

biggun
() автор топика
Ответ на: комментарий от biggun

Если у кого возникла подобная проблема и он(а) наткнется на эту тему, то в предыдущем правиле была ошибка (=«hid» вместо ==«hid»). После исправления оказалось, что обработка тех событий не дает результата. Текущее правило, которое работает:

ACTION=="add", SUBSYSTEM=="input", ENV{DEVNAME}=="", ATTR{device/power/control}="on"
Обработка именно этого правила отключает autosuspend для мышки.

biggun
() автор топика
Ответ на: комментарий от biggun

Похоже что у меня такая же проблема:мышь A4Tech X7 X-748K,вчера работала,сегодня отрубается.Гарантированно было обновлено ядро до 2.6.34.4-0.1-desktop (с какой версии только не помню,кажется просто .34было)и ещё десятка два пакетов(большая часть от vlc).

Подключение мыши добавляет в /sys/bus/usb/devices каталоги 3-3, 3-3:1.0, 3-3:1.1.Установка power в on включает мышь только в 3-3и 3-3:1.1.

Есть ещё одна мышь X6-550,она даёт лишь два устройства 3-4и 3-4:1-0,да ещё и не отрубается при power auto.

Я правильно понимаю что данное правило надо добавить в /lib/udev/rules.d? openSUSE 11.3

murmobl
()
Ответ на: комментарий от murmobl

Верно, в /etc/udev/rules.d. Если не заработает, то покажите лог

udevadm monitor --udev --property
при подключении мышки, попробую помочь.

biggun
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.