Разрешение (чувствительность) лазерной мышки [РЕШЕНО]

Изображение пользователя Eugene.

Купил беспроводный набор (мышь + клава) Genius SlimStar 820. Все замечательно, но есть одно большое НО! Даже при установленном минимальном ускорении курсора в настройках мышь скачет по экрану как угорелая (Разрешение экрана: 1024x768, разрешение мыши 1600 dpi)... xset m 0 0 в консоли тоже не меняет ситуацию. В меру своих знаний ковырял xorg.conf не помогло. Возможно из за того что в новой кубунте всем рулит udev... Гугл спрашивал, молчит.
Обращаюсь к участникам форума с просьбой помочь. Возможно кто то решал подобную проблему.

P.S.
Под оффтопиком комплект не проверял, не было возможности. А под любимой Кубунтой от такой мыши болит запястье...

0
Wander - 1 Июнь, 2010 - 17:59
Изображение пользователя Wander.

Гугл спрашивал, молчит.

Плохо спрашивал. Я бы сказал очень даже плохо. :-)
На мой первый же запрос, Гугл нашел все что нужно.

Вот пожалуйста:
(Я выбрал одно из самых простых решений)


Option "MinSpeed" "0.45"
Option "MaxSpeed" "0.75"
Option "AccelFactor" "0.020"

Это все дописать в XOrg в секцию - Section "InputDevice" - (не перепутай с клавой :D)
Ребут не забудь или Рестарт иксов.

Удачи! Отпишешься как оно.

+1
Eugene - 11 Октябрь, 2010 - 21:35
Изображение пользователя Eugene.

Плохо спрашивал. Я бы сказал очень даже плохо. :-)
Спрашивал как раз таки хорошо!
Опции:
Option "MinSpeed" "0.45"
Option "MaxSpeed" "0.75"
Option "AccelFactor" "0.020"

применяются исключительно для конфигурирования тачпада. Есть еще опции "Resolution" и "Sensitivity" Но опция "Resolution" используется для конфигурирования мышей подключенных через порт PS/2 и на USB мышки не распространяется. Что касается опции "Sensitivity" то она в моем случае оказалась крайне малоэффективна. И кроме того эти опции актуальны только для драйвера мыши "mouse". (http://www.rsdn.ru/forum/unix/3794100.flat.aspx) Что касается драйвера "evdev", то у него на данный момент вообще отсутствуют опции для настройки чувствительности мыши. В сборках X-сервера для Debian-based систем присутствует патч добавляющий еще несколько новых опции: "AccelerationNumerator", "AccelerationDenominator", "AccelerationThreshold" которые в комбинации с опциями "AccelerationProfile", "ConstantDeceleration", "AdaptiveDeceleration" и "AccelerationScheme" призваны обеспечить очень гибкую настройку чуствительности различных типов указателей... Среди вышеперечисленных опций в моем случае наиболее интересны: "ConstantDeceleration" и "AdaptiveDeceleration". Однако вменяемых результатов я так и не добился.
В общем проще было написать патч для драйвера мыши "evdev", который добавляет аналог опции "Sensitivity" имеющейся в драйвере "mouse". Патч очень маленький и крайне эффективен.
Содержание файла evdev.diff:

Развернуть/свернуть скрытый текст.
--- a/src/evdev.c 2009-12-11 06:37:05.000000000 +0300
+++ b/src/evdev.c 2010-06-13 17:20:44.213099083 +0400
@@ -566,7 +566,21 @@
             if (EvdevWheelEmuFilterMotion(pInfo, ev))
                 return;

-            pEvdev->delta[ev->code] += value;
+            if (ev->code == REL_X)
+            {
+                pEvdev->x_accum += value;
+                pEvdev->delta[REL_X] += (int)(pEvdev->x_accum * pEvdev->sensitivity);
+                pEvdev->x_accum -= (int)((int)(pEvdev->x_accum * pEvdev->sensitivity) / pEvdev->sensitivity);
+            }
+            else if (ev->code == REL_Y)
+            {
+                pEvdev->y_accum += value;
+                pEvdev->delta[REL_Y] += (int)(pEvdev->y_accum * pEvdev->sensitivity);
+                pEvdev->y_accum -= (int)((int)(pEvdev->y_accum * pEvdev->sensitivity) / pEvdev->sensitivity);
+            }
+            else
+                pEvdev->delta[ev->code] += value;
+
             break;
     }
}
@@ -2105,6 +2119,7 @@
     pEvdev->invert_x = xf86SetBoolOption(pInfo->options, "InvertX", FALSE);
     pEvdev->invert_y = xf86SetBoolOption(pInfo->options, "InvertY", FALSE);
     pEvdev->swap_axes = xf86SetBoolOption(pInfo->options, "SwapAxes", FALSE);
+    pEvdev->sensitivity = xf86SetRealOption(pInfo->options, "Sensitivity", 1.0);

     str = xf86CheckStrOption(pInfo->options, "Calibration", NULL);
     if (str) {

--- a/src/evdev.h 2009-12-11 06:37:05.000000000 +0300
+++ b/src/evdev.h 2010-06-13 14:47:02.000000000 +0400
@@ -114,7 +114,10 @@
     BOOL swap_axes;
     BOOL invert_x;
     BOOL invert_y;
+    float sensitivity;

+    int x_accum;
+    int y_accum;
     int delta[REL_CNT];
     unsigned int abs, rel;

Патч устанавливается в несколько простых шагов:
1) sudo aptitude install apt-build
2) sudo apt-build source xserver-xorg-input-evdev
3) sudo cp ./evdev.diff /var/cache/apt-build/build/xserver-xorg-input-evdev-2.3.2/debian/patches
4) sudo echo "evdev.diff" | sudo tee -a /var/cache/apt-build/build/xserver-xorg-input-evdev-2.3.2/debian/patches/series
5) sudo apt-build install xserver-xorg-input-evdev
6) sudo dpkg -i /var/cache/apt-build/repository/xserver-xorg-input-evdev_2.3.2-5ubuntu1_i386.deb
7) sudo nano /usr/lib/X11/xorg.conf.d/05-evdev.conf

На последнем шаге окрываем для редактирования файл 05-evdev.conf и добавляем в секцию InputClass следующую строчку Option "Sensitivity" "0.3". В которой вместо коэффициента 0,3 может быть любое другое, эксперементально подобранное значение.

Должно получится что то вроде этого:
Section "InputClass"
Identifier "evdev pointer catchall"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
Option "Sensitivity" "0.3"
EndSection

Все! перезапускаем иксы и пользуемся! :)

0
Voletor - 23 Июнь, 2010 - 08:46

ура заработало!!! Спасибо Eugene.

+1
Eugene - 24 Октябрь, 2010 - 08:43
Изображение пользователя Eugene.

В общем история получила логичное продолжение...
У меня появилось немного свободного времени, и я решил докопаться до сути проблемы. Т.е. все таки почему не работают опции "ConstantDeceleration" и "AdaptiveDeceleration"?
Причиной оказалась ошибка в коде драйвера устройств ввода "evdev". Так же хочу обратить внимание что эта ошибка исправлена в версии драйвера >= 4.0. Однако уже второй релиз подряд в составе дистрибутива идет драйвер версии 3,2, что меня и побудило напистать небольшой патч и одновременно немного упростить процедуру его наложения.

1) Создаем два файла "fix.sh" и "evdev.diff", содержимое которых приведено ниже (ВАЖНО! Оба файла должны находится в одной директории):
Содержание файла "fix.sh":
#!/bin/sh
#

sudo apt-build --patch "$PWD/evdev.diff" --build-only install xserver-xorg-input-evdev
sudo dpkg -i /var/cache/apt-build/repository/xserver-xorg-input-evdev_*.deb

Содержание файла "evdev.diff":
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1329,6 +1329,9 @@ EvdevAddRelClass(DeviceIntPtr device)
                                        GetMotionHistorySize(), Relative))
         return !Success;

+    if (!InitPtrFeedbackClassDeviceStruct(device, EvdevPtrCtrlProc))
+        return !Success;
+
     for (axis = REL_X; axis <= REL_MAX; axis++)
     {
         int axnum = pEvdev->axis_map[axis];
@@ -1345,9 +1348,6 @@ EvdevAddRelClass(DeviceIntPtr device)

     xfree(atoms);

-    if (!InitPtrFeedbackClassDeviceStruct(device, EvdevPtrCtrlProc))
-        return !Success;
-
     pInfo->flags |= XI86_POINTER_CAPABLE;

     return Success;

2) Запускаем наш скрипт (Интернет должен быть подключен):

sh ./fix.sh

3) Открываем для редактирования файл "10-evdev.conf":

sudo nano /usr/share/X11/xorg.conf.d/10-evdev.conf

и добавляем в секцию с идентификатором "MatchIsPointer on" следующие две строки:

   Option "AccelerationScheme" "predictable"
   Option "ConstantDeceleration"  "3.0"

Где вместо коэффициента "3.0" может быть любое другое, эксперементально подобранное, значение (чем больше, тем медленнее будет перемещаться указатель мыши).
Отредактированная секция должна выглядеть следующим образом:
   Section "InputClass"
           Identifier "evdev pointer catchall"
           MatchIsPointer "on"
           MatchDevicePath "/dev/input/event*"
           Driver "evdev"
           Option "AccelerationScheme" "predictable"
           Option "ConstantDeceleration"  "3.0"
   EndSection

4) Перезапускаем иксы или перезагружаемся.
5) Пользуемся...

0
Linus - 24 Октябрь, 2010 - 21:17
Изображение пользователя Linus.

Хм... я когда заметил, что ускорение мышки отличается от оного в Виндовс при одинаковом разрешении, то просто решил поискать настройку.
Вот здесь настраивается ускорение:
Меню запуска приложений -> параметры системы -> устройства ввода -> мышь -> Дополнительно. Пункт "Ускорение курсора".

И почему-то по умолчанию в Убунту/Кубунту стоит ускорение х2. Я снижаю до х1 и всё прекрасно работает.

+1
Eugene - 24 Октябрь, 2010 - 21:48
Изображение пользователя Eugene.

Меню запуска приложений -> параметры системы -> устройства ввода -> мышь -> Дополнительно. Пункт "Ускорение курсора".
У меня даже при 0.1x мышь летает как угорелая!

P.S.
Разрешение мыши 1600 dpi, разрешение экрана 1920x1080

Отправить комментарий