LINUX.ORG.RU

Расстояние, пройденное мышкой

 , ,


0

2

Помнится, когда я еще сидел на винде, у меня была маленькая резидентная программа, которая сидела в системном трее и измеряла расстояние, пройденное мышкой по столу. Расстояние измерялось в метрах, километрах. Было расстояние, пройденное за день, за месяц и за весь период использования.
Хотелось бы такую же программу сделать в линуксе, поскольку я не нашел ни одного аналога. Я бы сделал ее на Python + PyQt 5. Но вот какую библиотеку использовать для сбора этой статистики, я понятия не имею. Вы не могли бы мне подсказать, пожалуйста?

★★★★★

модуль ядра пиши :)

Harald ★★★★★
()
Ответ на: комментарий от WereFox

Для прикола. Мне нравится статистика подобного рода.

Rinaldus ★★★★★
() автор топика

при чём тут тег «python»?

Никакой статистики нет на самом деле, прекрати мыслить вашими пистонистыми высокоуровнёвыми категориями. Собираешь события смещения указателя с помощью xlib, и, зная сколько у тебя расстояния приходится на пиксель(и), посчитать всё в итоге не сложно

к слову, написать могу и сам, можешь стукануть на мыло

reprimand ★★★★★
()

Я бы сделал ее на Python + PyQt 5.

Блин, ну ладно ещё Python (хотя тоже), но Qt-то тут куда? Сделай маленький демон, который логгирует этот дело и пару утилит, которые выводят в текстовом виде в консоль (можно потом добавить ещё вывод в виде html или ещё какой фигни, хоть картинку рендерить с графиком).

Psych218 ★★★★★
()
Ответ на: комментарий от reprimand

и, зная сколько у тебя расстояния приходится на пиксель(и)

В этом проблема, кстати. У меня на мышке вот есть кнопочка переключения dpi (шагами от 300 до 3000 вроде). И сдаётся мне, что этот параметр совершенно неизвестен вне самой мышки, и сама эта кнопка вообще никаких событий не генерирует. Если переключателя нет, то проще, конечно, можно задать это число. Но если переключатель есть, то уже никак.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от Psych218

Можно было бы сделать консольную версию и GUI для нее. Но для начала надо поискать библиотеку, чтобы было, от чего плясать.

Rinaldus ★★★★★
() автор топика

Я бы отталкивался от прослушивания /dev/input/mouse* . Собственно ЯП уже не так важен будет

Dred ★★★★★
()
Ответ на: комментарий от Rinaldus

Ну в этом нет ничего сложного, выше верно сказали — xlib (см. MotionNotify). Либо (возможно предпочтительнее, дабы к иксам не привязываться) правда тупо из /dev/input/mouse0 читать.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от peregrine

Очевидно, что сантиметры в общем виде посчитать невозможно. А с пикселями проблем возникнуть не должно. Хотя, на мой взгляд, задача относится к классу «абсолютное ненужно в масштабе видимой вселенной».

MimisGotAPlan
()
$ sudo chmod +r /dev/input/mice
import struct, time
from signal import signal, SIGINT, SIGTERM, SIGQUIT

mouse_dev = open('/dev/input/mice', 'rb')
stat_file = open('mouse_statistics.txt', 'a')

def shutdown(*a):
    stat_file.close()
    exit()

def mouse_statistics():
    while True:
        s, x, y = struct.unpack('Bbb', mouse_dev.read(3))
        b = ['_LR_M'[s&i] for i in (1,2,4) if s&i]
        buttons = '  Buttons: '*any(b) + ''.join(b)
        t = time.time()
        print(f'{t:.6f}  DeltaX: {x:4}  DeltaY: {y:4}{buttons}', file=stat_file)

[signal(s, shutdown) for s in (SIGINT, SIGTERM, SIGQUIT)]
mouse_statistics()
anonymous
()
Ответ на: комментарий от Psych218

Не знаю как на линухе, на винде принято мыши обладать ускорением, так что и без переключателя задача нерешаема

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

Ускорение софтовое, его узнать хотя бы возможно на каждый момент времени, или по каким алгоритмам делается (у меня ускорения нет, например), так что задача решаема. А вот с DPI нет, потому что информации об этом в системе попросту нет, только в мышке самой. Ну и на сантиметры мыши по столу ускорение влияния не оказывает, только на сантиметры курсора по экрану.

Psych218 ★★★★★
()
Ответ на: комментарий от peregrine

А это смотря какое расстояние считать. Сколько мышка по столу ездила или сколько курсор по монитору.

Хы. Ну это да, с курсором проще будет. DPI монитора обычно всё же известен.

Psych218 ★★★★★
()

В каких единицах измерения нужно расстояние? Тебя интересует расстояние которое проходит девайс или указатель?

В случае девайса, я не уверен что такое возможно получить точно.

invy ★★★★★
()
Ответ на: комментарий от Psych218

А вот с DPI нет, потому что информации об этом в системе попросту нет, только в мышке самой.

В конфиге счётчика указать.

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

Почему ты считаешь, что погрешность дикая будет? Даже если у тебя 300 dpi мышь, то это больше 11 точек на миллиметр. Через /dev/input/mice мышкой можно вместо рулетки пользоваться, очень точно меряет.

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

Хз насколько точный там сенсор. Тем более никто не мешает просто поднять мышку и перенести. Сломав всё.

RazrFalcon ★★★★★
()
Ответ на: комментарий от MimisGotAPlan

плюсирую, ведь соотношение пикселей и сантиметров может отличаться от модели мышки и настройки чувствительность и т.д.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от polym

В конфиге счётчика указать.

Что указать? Есть мышка, на ней кнопка переключатель DPI, как я выше писал. Эта кнопка никаких событий не генерирует, и в системе DPI мышки никак не светится, оно дальше мышки не идёт никуда. Ну укажу я в конфиге 600 dpi, посижу так пять минут, потом захочу поиграть в xonotic, нажму кнопку пару раз, будет 3000 dpi, поиграю пять минут, включу обратно 600, или вообще 300. Каждый раз, когда пользователь нажимает кнопку на мышке, также (пользователю же) править конфиг?

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)

Угу, была такая. Вроде immouse называлась.

andreyu ★★★★★
()
Ответ на: комментарий от Psych218

У меня на мышке вот есть кнопочка переключения dpi (шагами от 300 до 3000 вроде).

Я всегда считал, что в данном случае этот параметр влияет исключительно на точность позиционирования, а не пройденное расстояние.

andreyu ★★★★★
()
Ответ на: комментарий от Psych218

С такой мышкой всё понятно, назначить дпи на хоткеи и всё.
Любишь статистику - переключай дпи и в программе замера расстояния.

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

Ну да, если только так. Только это уже не автоматический (не совсем автоматический) подсчёт и ложится (частично) на плечи пользователя — не забывать тыкать хоткеи.

Psych218 ★★★★★
()
Ответ на: комментарий от andreyu

Я всегда считал, что в данном случае этот параметр влияет исключительно на точность позиционирования, а не пройденное расстояние.

Ну вот теперь знаешь, что нет. При увеличении dpi курсор начинает носиться быстрее, при уменьшении — медленнее. В играх есть такая настройка как sensitivity, и соответственно в конечном итоге оно, естественно, влияет именно на точность наведения. То же можно сделать и в самих иксах (настроить скорость передвижения курсора). Соответственно, если увеличить dpi самой мышки и при этом уменьшить скорость движения курсора в иксах, получим действительно именно увеличенную точность позиционирования. Только вот узнать это в рамках какого-либо демона для измерения «пробега» невозможно. Можно лишь посчитать количество пикселей. Получить сантиметры (ну дюймы точнее) поделив пиксели на dpi. DPI можно задать в конфиге, но при переключении на мышке мы не получаем никаких сигналов, соответственно автоматически изменять значение в конфиге при переключении dpi на мышке не выйдет, только если пользователь нажимая кнопку будет ещё и конфиг менять (да, он может делать это хоткеем в том числе, но это всё равно ручное действие).

Psych218 ★★★★★
()

Когда-то я такую под Виндой на Дельфе писал, вот:
https://github.com/Novator/MouseWay/releases

Работает под Wine'ом, кстати нормально.
Сырцы там же, пощупай, может что и позаимствуешь.

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