Ποντίκι Ρυθμιση dpi και scroll speed

Στο παρόν θα δούμε πως θα πειράξουμε κάποιο δύσκολο mouse. Η ροδέλα κάνει κύλιση είτε αργά είτε γρήγορα. Το βελάκι το ίδιο. Και το γραφικό περιβάλλον δεν είναι πάντα λύση. Έχω δυο ποντίκια και με τις ρυθμίσεις είτε το ένα θα ρυθμιστεί όπως το θέλουμε είτε το άλλο.

Πριν το διαβάσεις ρίξε πρώτα μια γρήγορη ματιά στο παρακάτω

Δεν είναι ανάγκη να το καταλάβεις, απλά να μην έχεις άγνωστες λέξεις. Δεν ξεμπλέξαμε με το xinput και το udev υπάρχουν πολλά ακόμα να λεχθούν και ίσως ακολουθήσουν και άλλα άρθρα. Αν υπάρχει κάποιο λάθος πείτε το στα σχόλια.

Τι είναι το DPI

Τo DPI (Dots per inch) είναι ένας αριθμός που μας λέει πόσο ευαίσθητο είναι ένα mouse. Αν μετακινήσουμε το mouse οριζόντια κατά μια ίντσα, ο αριθμός λέει πόσα σήματα θα στείλει το ποντίκι στον υπολογιστή. Αν το ποντίκι έχει πολλά DPI θα στείλει περισσότερα σήματα και το ποντίκι θα μετακινηθεί πολύ γρήγορα. Επίσης θα είναι λίγο ποιο ακριβό να το αγοράσεις. Με άλλα λόγια όσο ποιο μεγάλος είναι αυτός αριθμός τόσο ποιο ευαίσθητο είναι το mouse. Το πόσο μακρυά θα πάει είναι και θέμα λογισμικού, καθώς αυτό θα λάβει υπόψιν και κάποιο προφίλ επιτάχυνσης. Αν κουνάς το mouse ελαφρά για να σημαδέψεις μια μικρή περιοχή το λογισμικό ή το παιγνίδι θα το λάβει αυτό υπόψιν του. Αν το κινήσεις γρήγορα θα κάνει και μεγάλες κινήσεις.

Ποντίκια με πολλά dpi είναι απαραίτητα σε μεγάλες ή σε πολλαπλές οθόνες καθώς και σε πολλά παιγνίδια. Τα καλά mouse έχουν ρυθμιζόμενα dpi συχνά με κάποιο επιπλέον κουμπί. Το πρόβλημα είναι πως το mouse δεν έχει κάποιο τυποποιημένο τρόπο να αναφέρει πόσα dpi έχει στον υπολογιστή. Σε ένα σύστημα με πολλά ποντίκια, αν αυτά έχουν διαφορετικά dpi θα πρέπει με κάποιο τρόπο να δώσουμε αυτή την τιμή. Το xinput εδώ δεν μπορεί να βοηθήσει και θα πρέπει να δράσουμε στο επίπεδο του udev.

Ένα άλλο πράγμα που θα πρέπει να εξηγηθεί είναι το Polling Rate. Αυτό το μετράμε σε Hz και μετράει πόσες φορές θα επικοινωνήσει το ποντίκι με τον υπολογιστή. Μια τιμή 125Ηz σημαίνει πως 125 φορές το δευτερόλεπτο ή κάθε 8 χιλιοστά του δευτερολέπτου το mouse θα δώσει αναφορά. Όσο ποιο μεγάλη είναι αυτή η τιμή, τόσο καλύτερη απόκριση θα έχει το ποντίκι και βέβαια τόσο ποιο ακριβό θα είναι. Επίσης τόσο περισσότερη cpu θα χρησιμοποιεί. Εδώ λοιπόν δεν ισχύει πάντα το ακριβότερο είναι και το καλύτερο.

Η ταχύτητα κύλισης

Η ροδέλα του ποντικού δεν είναι κάτι το αναλογικό. Στην πραγματικότητα είναι 3 κουμπιά όπως τα υπόλοιπα. Όταν γυρνάμε την ροδέλα στην πραγματικότητα είναι σαν να πατάμε επανειλημμένα κάποιο κουμπί του ποντικιού. Ένα σύνηθες ποντίκι θα στείλει ένα πάτημα κάθε 15^\circ μοίρες. Αν θέλουμε να το πειράξουμε αυτό θα καταφύγουμε πάλι στο udev. Η δουλεία του xinput είναι απλά να πάρει αυτά τα πατήματα και να τα στείλει στην εφαρμογή.

Η βάση hwdb του systemd

Η βάση δεδομένων του hwdb είναι ένα δυαδικό αρχείο που υπάρχει στην θέση /etc/udev/hwdb.bin , or η κάποιες φορές στην /usr/lib/udev/hwdb.bin. Αυτή κατασκευάζετε απο τα αρχεία που υπάρχουν στον κατάλογο /usr/lib/udev/hwdb.d/ τα οποία ποτέ δεν πειράζουμε καθώς και στον κατάλογο /etc/udev/hwdb.d όπου προσθέτουμε τις αλλαγές μας.
Με την χρήση του hwdb αποφεύγουμε στο systemd να γράφουμε κανόνες του udev, που δεν είναι πάντα μια ευχάριστη εμπειρία, τουλάχιστον σε κάποιες περιπτώσεις.

Φτιάχνοντας τον δικό μας κανόνα

Στο αρχείο /lib/udev/hwdb.d/70-mouse.hwdb θα δούμε ρυθμίσεις για πολλά ποντίκια που υπάρχουν ήδη στην βάση. Κοιτάζουμε πρώτα αν υπάρχει εκεί ήδη το ποντίκι μας για να αποφασίσουμε αν θα τροποποιήσουμε τον κανόνα ή αν θα φτιάξουμε κάποιο κανόνα από την αρχή. Το αρχείο αυτό περιέχει επίσης την τεκμηρίωση και τις εντολές που πρέπει να τρέξουμε, οπότε καλό είναι να του ρίξουμε μια προσεκτική ανάγνωση.
Το πρώτο πράγμα είναι να προσδιορίσουμε το συγκεκριμένο ποντίκι που θέλουμε. Αυτό θα το κάνουμε είτε με το όνομα του, είτε με τον κωδικό του USB. Το σύστημα είναι πολύ ευέλικτο. Οι παρακάτω γραμμές αναφέρονται στο ίδιο mouse.

mouse:usb:v17efp6019:name:Lenovo Optical USB Mouse:
mouse:usb:*:name:Lenovo Optical USB Mouse:
mouse:usb:v17efp6019:*
mouse:*:name:Lenovo Optical USB Mouse:

Τα ποντίκια της Logitech έχουν ένα δέκτη, κάτι που με κάνει να τα προτιμώ, αλλά εμφανίζονται σαν μια συσκευή usb, και είναι πολύ ποιο δύσκολο να βρεις την σωστή συσκευή. Οι οδηγίες δεν ισχύουν για αυτά.

Για το παράδειγμα θα χρησιμοποιήσω ένα απλό ενσύρματο ποντίκι. Με την εντολή lsusb θα βρω

Bus 005 Device 013: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse

Ο κωδικός USB λοιπόν είναι ο '093a:2510` και θέλει το παρακάτω

mouse:usb:v093ap2510:*

μετά θα θέσω κάποιες ιδιότητες στην συσκευή. Αυτές που θα πειράξω είναι το MOUSE_DPI, και το MOUSE_WHEEL_CLICK_ANGLE.

Το MOUSE_WHEEL_CLICK_ANGLE με τυπική τιμή 15. Έτσι σε μια πλήρη περιστροφή θα έχω 24 πατήματα μιας και 15*24 =360. Μικρότερο νούμερο και θα θέλει περισσότερα κλικ άρα θα πηγαίνει ποιο αργά.

Το MOUSE_DPI είναι τα dpi. Μπορούμε να δώσουμε πολλά, αλλά δεν θα τα δει το xinput οπότε δεν υπάρχει λόγος. Έχει την μορφή MOUSE_DPI=<dpi>[@<frequency>]

Στην πράξη

Θα φτιάξουμε ένα αρχείο με όνομα /etc/udev/hwdb.d/71-mouse-local.hwdb και θα περιέχει τα παρακάτω

# My mouse settings
mouse:usb:v093ap2510:*
   MOUSE_DPI=600
   MOUSE_WHEEL_CLICK_ANGLE=10

Θα κάνουμε compile το hwdb με την εντολή

sudo systemd-hwdb update

Αν έχουμε σκαλίσει και το udev για κάποιο άλλο λόγο, επίσης θα πρέπει να δώσουμε

sudo udevadm control --reload-rules

και θα κάνουμε trigger τον νέο κανόνα να δούμε αν όλα πήγαν καλά

sudo udevadm trigger /dev/input/eventXX

Ξέρουμε ήδη πως βρίσκουμε το σωστό αριθμό για το eventXX αλλά και ένα σκέτο *` θα κάνει την ίδια δουλειά αν είμαστε τεμπέληδες :innocent:.

Μπορούμε να δούμε αν πήρε τις ιδιότητες με την εντολή (εδώ θα πρέπει να βρούμε τον αριθμό)

 sudo udevadm info /sys/class/input/eventXX

Πιθανά κάποιες απο τις παραπάνω να μην θέλουν sudo αλλά δεν βλέπτει.

Αυτά θα τα κάνουμε μια φορά και το συστημα θα έχει ρυθμιστεί. Κάθε ποντίκι θα έχει διαφορετική βασική ρύθμιση. Στην συνέχεια ρυθμίζουμε είτε απο το γραφικό περιβάλλον τις άλλες παραμέτρους του ποντικιού, είτε μέσα απο το xinput.

Μετρώντας τα dpi

Ειλικρινά δεν θα το έκανα αυτό, αλλά μπορείς να μετρήσεις τα dpi του ποντικιού. Θα πρέπει να μετακινήσεις το mouse οριζόντια κατά 250mm και μετά να μετρήσεις πόσα χιλιοστά μετακινήθηκε ο δρομέας στην οθόνη. Να μου λείπει !

 $ mouse-dpi-tool /dev/input/event8
Mouse PIXART USB OPTICAL MOUSE on /dev/input/event8
Move the device 250mm/10in or more along the x-axis.
Pause 3 seconds before movement to reset, Ctrl+C to exit.
Covered distance in device units:       67 at frequency 125.3Hz |       \^C
Estimated sampling frequency: 125Hz (mean 125Hz)
To calculate resolution, measure physical distance covered
and look up the matching resolution in the table below
       4mm	    0.17in	     400dpi
       2mm	    0.11in	     600dpi
       2mm	    0.08in	     800dpi
       1mm	    0.07in	    1000dpi
       1mm	    0.06in	    1200dpi
       1mm	    0.05in	    1400dpi
       1mm	    0.04in	    1600dpi
       0mm	    0.04in	    1800dpi
       0mm	    0.03in	    2000dpi
       0mm	    0.03in	    2200dpi
       0mm	    0.03in	    2400dpi
If your resolution is not in the list, calculate it with:
	resolution=67/inches, or
	resolution=67 * 25.4/mm

Entry for hwdb match (replace XXX with the resolution in DPI):
mouse:usb:v093ap2510:name:PIXART USB OPTICAL MOUSE:
 MOUSE_DPI=XXX@125

Αλλά έχει ένα καλό. μου γράφει τον κανόνα και κλέβω την πρώτη γραμμή :innocent:

2 «Μου αρέσει»