A grande richiesta, vediamo come configurare un wheel-mouse in Linux, in modo che funzioni col maggior numero di applicazioni. Un mio consiglio personale è di lasciar perdere Imwheel, un programma che serve proprio a questo, ma che crea a volte incompatibilità con alcuni programmi: io ho configurato tutto senza di esso, e il wheel-mouse mi funziona in X-Window, Kde, Gnome, Wmaker, Emacs, Netscape, Vim, Rxvt e compagnia. A me l'uso contemporaneo di Gpm (per il mouse in console pura) e X-Window creava dei problemi, funzionava "random". Ho risolto facendo leggere in console su /dev/gpmdata, e in X-Window direttamente da /dev/psaux. Queste è la situazione dei device in /dev/:
mrshark@pingu:~$ ls -l /dev/mouse /dev/gpmdata /dev/psaux prw-r--r-- 1 root root 0 feb 5 14:16 /dev/gpmdata lrwxrwxrwx 1 root root 5 feb 5 14:26 /dev/mouse -> psaux crw------- 1 root root 10, 1 feb 12 07:48 /dev/psaux |
Io uso wheel-mouse con porta PS/2, se avete info per altri tipi di mouse, fatemi sapere! I mouse Logitech in versione OEM (bianchi con logo nero), pare non funzionino. Seguono le sezioni relative al mouse delle configurazioni per Xfree86 versioni 3 e 4 rispettivamente:
Attenzione |
Il resto dei file è stato eliminato! C'è molta altra roba all'interno di questi file! Non copiateli semplicemente al posto di quelli che avete, altrimenti X non vi partirà più! Siete avvisati! ;-) ) |
=== file: /etx/X11/XF86Config ===
Section "Pointer" Protocol "imps/2" # mouse ps/2 # Protocol "intellimouse" # mouse seriale Device "/dev/psaux" buttons 5 ZAxisMapping 4 5 EndSection |
=== file: /etx/X11/XF86Config-4 ===
# questa e' la sezione originale del mio file, che uso ancora a volte # quando non ho voglia di attaccare il wheel-mouse al portatile Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "PS/2" Option "Device" "/dev/psaux" Option "Emulate3Buttons" "on" Option "Emulate3Timeout" "50" EndSection # questa invece e' la nuova sezione che ho aggiunto per il wheel-mouse Section "InputDevice" Identifier "Mouse2" Driver "mouse" Option "Protocol" "IMPS/2" # mouse ps/2 # Option "Protocol" "INTELLIMOUSE" # mouse seriale Option "Device" "/dev/psaux" Option "Emulate3Buttons" "off" Option "ZAxisMapping" "4 5" EndSection # in questa sezione dovete specificare quale dei 2 mouse impostati # precedentemente volete usare nelle vostre sessioni X-Window; la # riga che vi interessa e' la InputDevice... Section "ServerLayout" Identifier "layout1" Screen "screen1" # InputDevice "Mouse1" "CorePointer" InputDevice "Mouse2" "CorePointer" InputDevice "Keyboard1" "CoreKeyboard" EndSection |
Con queste dovreste essere a posto per X-Window, e quindi il mouse dovrebbe già funzionare anche nei vari Window manager (a me già così funziona in tutti i programmi Kde 1 e 2, Gnome e i suoi WM, e con Wmaker). Provate, riavviando X.
Ora passiamo a Gpm. Quella che segue è la configurazione di Pingu, la mia Linuxbox Debian, che ha un file apposito per le opzioni di Gpm, quindi se usate altre distribuzioni dovrete inserire nello script che lo avvia le opzioni indicate di seguito ( -m /dev/psaux -t imps2 ):
=== file: /etc/gpm.conf ===
device=/dev/psaux responsiveness= repeat_type= type=imps2 append="" # eventualmente mettili sulla riga di comando di gpm se non usi debian # le uniche 2 opzioni che uso sono m e t, come segue da "ps aux | grep gpm": # /usr/sbin/gpm -m /dev/psaux -t imps2 |
Seguono ora le righe da aggiungere al vostro file ~/.Xdefaults per abilitare lo scroll in Netscape, 5 :
Attenzione |
Il mouse in Netscape funziona solo se avete il NumLock del tastierino numerico disattivato! Ma con questo disattivato, Rxvt fa casini... a voi la palla... |
=== file: ~/.Xdefaults ===
Netscape*drawingArea.translations: #replace \ <Btn1Down>: ArmLink() \n\ <Btn2Down>: ArmLink() \n\ ~Shift<Btn1Up>: ActivateLink() \n\ ~Shift<Btn2Up>: ActivateLink(new-window) \ DisarmLink() \n\ Shift<Btn1Up>: ActivateLink(save-only) \ DisarmLink() \n\ Shift<Btn2Up>: ActivateLink(save-only) \ DisarmLink() \n\ <Btn1Motion>: DisarmLinkIfMoved() \n\ <Btn2Motion>: DisarmLinkIfMoved() \n\ <Btn3Motion>: DisarmLinkIfMoved() \n\ <Motion>: DescribeLink() \n\ <Btn3Down>: xfeDoPopup() \n\ <Btn3Up>: ActivatePopup() \n\ Ctrl<Btn4Down>: PageUp()\n\ Ctrl<Btn5Down>: PageDown()\n\ Shift<Btn4Down>: LineUp()\n\ Shift<Btn5Down>: LineDown()\n\ None<Btn4Down>: LineUp()LineUp()LineUp()LineUp()LineUp()LineUp()\n\ None<Btn5Down>: LineDown()LineDown()LineDown()LineDown()LineDown()LineDown()\n\ Alt<Btn4Down>: xfeDoCommand(forward)\n\ Alt<Btn5Down>: xfeDoCommand(back)\n Netscape*globalNonTextTranslations: #override\n\ Shift<Btn4Down>: LineUp()\n\ Shift<Btn5Down>: LineDown()\n\ None<Btn4Down>:LineUp()LineUp()LineUp()LineUp()LineUp()LineUp()\n\ None<Btn5Down>:LineDown()LineDown()LineDown()LineDown()LineDown()LineDown()\n\ Alt<Btn4Down>: xfeDoCommand(forward)\n\ Alt<Btn5Down>: xfeDoCommand(back)\n |
Con le righe seguenti, da aggiungere in ~/.emacs, abiliterete la rotella anche per Emacs:
=== file: ~/.emacs ===
(defun up-slightly () (interactive) (scroll-up 5)) (defun down-slightly () (interactive) (scroll-down 5)) (global-set-key [mouse-4] 'down-slightly) (global-set-key [mouse-5] 'up-slightly) (defun up-one () (interactive) (scroll-up 1)) (defun down-one () (interactive) (scroll-down 1)) (global-set-key [S-mouse-4] 'down-one) (global-set-key [S-mouse-5] 'up-one) (defun up-a-lot () (interactive) (scroll-up)) (defun down-a-lot () (interactive) (scroll-down)) (global-set-key [C-mouse-4] 'down-a-lot) (global-set-key [C-mouse-5] 'up-a-lot) |
Con le righe seguenti, sempre da aggiungere in ~/.emacs, abiliterete invece la rotella anche per XEmacs:
=== file: ~/.emacs ===
(define-key global-map 'button4 '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-down 5) (select-window curwin) ))) (define-key global-map [(shift button4)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-down 1) (select-window curwin) ))) (define-key global-map [(control button4)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-down) (select-window curwin) ))) (define-key global-map 'button5 '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-up 5) (select-window curwin) ))) (define-key global-map [(shift button5)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-up 1) (select-window curwin) ))) (define-key global-map [(control button5)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-up) (select-window curwin) ))) |
Altre informazioni nel documento indicato nella sezione "Links"