Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2021-09-16 13:34:59

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

[solved]Jak zablokować wklejanie przy MMB?

Jak w temacie.
Chciałbym zablokować możliwość wklejania po wciśnięciu środkowego klawisza (kółka znaczy). Nie chodzi mi tu o zablokowanie środkowego klawisza (bo to trywialne) ale wyłącznie o zablokowanie wklejenia. Powód: często zdarza mi się, że przy kręceniu kółkiem przypadkowo toto wcisnę, a moja ulubiona myszka ma bardzo czuły prztyczek... a chciałbym zachować resztę przydatnych funkcji.
XFCE, Ubuntu 20.04.
Ktoś coś?

Ostatnio edytowany przez ethanak (2021-09-19 21:18:21)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#2  2021-09-16 14:56:30

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: [solved]Jak zablokować wklejanie przy MMB?

Nigdy się nad tym nie zastawiałem, mimo używania myszy o różnych czułościach.

Tu podobno to rozwiązali:
https://forum.mxlinux.org/viewtopic.php?t=61432

Ale autor jakiś taki „roztrzepany”?

W Debianie jest program imwheel, ale nie sprawdzałem go:
https://manpages.debian.org/buster/imwheel/imwheel.1.en.html

Ostatnio edytowany przez fnmirk (2021-09-16 14:57:21)

Offline

 

#3  2021-09-16 19:50:22

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [solved]Jak zablokować wklejanie przy MMB?

Trzeba poszukać za frazami "primary clipboard" , bo to on odpowiada za ten schowek przy zaznaczaniu myszką. Pewnie można by bez problemu odszukać numerek przycisku myszki i stosowna regułkę dla udev'a napisać, by odmapować ten przycisk -- mniej więcej tak jak to się robi z mapowaniem klawiszy klawiatury. xD

Ostatnio edytowany przez morfik (2021-09-16 19:50:49)

Offline

 

#4  2021-09-16 20:31:28

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [solved]Jak zablokować wklejanie przy MMB?

Wygląda na to, że tylko środowiska pokroju GNOME/KDE oferują tego typu funkcjonalność. W przypadku innych trzeba najwyraźniej paczować biblioteki gtk/qt, bo one tego w standardzie nie oferują.

Można by też tak w skrypcie uruchomionym w tle: xD

Kod:

$ while true; do echo -n | xsel -n -i && sleep 0.1; done

Ostatnio edytowany przez morfik (2021-09-16 21:30:10)

Offline

 

#5  2021-09-17 12:29:59

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [solved]Jak zablokować wklejanie przy MMB?

Ech... liczyłem na jakiś koszerny sposób :(
Co do skryptu wpadłem właśnie na (chyba) lepszy pomysł: skrypt w pythonie który przez evdev przejmuje myszkę, i przepuszcza MMB tylko wtedy, gdy jakiś czas wcześniej nie było eventu od kółka, ewentualnie opóźnia event i przepuszcza tylko wtedy, gdy zaraz po nim nie było kółka.
Mam coś podobnego do mapowania klawiatury numerycznej na polecenia OpenSCAD-a, sprawdza się jak na razie, jutro spróbuję z tym co wymyśliłem - jak wyjdzie (albo nie) to dam znać.
A, co do posta z mxlinux , czytałem to już wcześniej, wszystko się sprowadziło do włączania/wyłączania MMB ręcznie, co mi absolutnie nie pasi.

Ostatnio edytowany przez ethanak (2021-09-17 12:35:11)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#6  2021-09-17 13:31:40

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: [solved]Jak zablokować wklejanie przy MMB?

A próbowałeś zwyczajnie zmienić sposób trzymania myszy? Zacząłem się nad tym zastanawiać i zauważyłem u siebie ciekawe zjawisko.
Kiedy obsługuję kółko paliczkiem palca środkowego to mi się coś takiego z tym wklejaniem przytrafia.

Jednak przez większość czasu (właściwie to chyba przez cały czas) obsługuję kółko myszy opuszką palca środkowego i wtedy palec nie znajduje się nad mikroprzełącznikiem i go nie naciska. Chcąc go nacisnąć lekko przesuwam palec do przodu.

Offline

 

#7  2021-09-17 14:14:08

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [solved]Jak zablokować wklejanie przy MMB?

Wiesz - po prawie 40 latach używania myszek różnej maści jakoś trudno zmienić przyzwyczajenia :)
Poza tym mogę równie dobrze uważać żeby nie nacisnąć. Oba rozwiązania są tyle samo warte.
Takie dwa trudne słowa: usability i ergonomia.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#8  2021-09-17 15:41:44

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: [solved]Jak zablokować wklejanie przy MMB?

Wspominałem o zmianie uchwytu myszy, bo przypomniałem sobie o tym, że mnie to przeszkadzało kiedy pojawiły się pierwsze myszy z kółkiem  w win98.

Tam można to było wyłączyć, a jak się zapomniało to po naciśnięciu kółka można było stracić nawet dokument bo potrafił zniknąć poza ekranem, zanim zdążyło się zareagować. I wtedy pewnie przetrenowałem to przewijanie, bez naciskania. I robię to już podświadomie.

I dlatego zdziwiło mnie Twoje pytanie bo ja inaczej obsługuję kółko. A myszy dużo używam w programach graficznych.


PS W każdym wieku można zacząć trenować.

Ostatnio edytowany przez fnmirk (2021-09-17 15:47:28)

Offline

 

#9  2021-09-18 10:46:10

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: [solved]Jak zablokować wklejanie przy MMB?

Masz znalazłem coś takiego:
https://linuxhint.com/change_mouse_touchpad_settings_xinput_linux/
https://www.mankier.com/4/libinput#Configuration_Details

Jedna moja mysz z dwoma kółkami, próbuję to uskutecznić:

Kod:

xinput --list-props 9
Device 'A4Tech PS/2+USB Mouse':
        Device Enabled (173):   1
        Coordinate Transformation Matrix (175): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Natural Scrolling Enabled (310):       0
        libinput Natural Scrolling Enabled Default (311):       0
        libinput Scroll Methods Available (312):        0, 0, 1
        libinput Scroll Method Enabled (313):   0, 0, 0
        libinput Scroll Method Enabled Default (314):   0, 0, 0
        libinput Button Scrolling Button (315): 2
        libinput Button Scrolling Button Default (316): 2
        libinput Middle Emulation Enabled (317):        0
        libinput Middle Emulation Enabled Default (318):        0
        libinput Accel Speed (319):     0.000000
        libinput Accel Speed Default (320):     0.000000
        libinput Accel Profiles Available (321):        1, 1
        libinput Accel Profile Enabled (322):   1, 0
        libinput Accel Profile Enabled Default (323):   1, 0
        libinput Left Handed Enabled (324):     0
        libinput Left Handed Enabled Default (325):     0
        libinput Send Events Modes Available (295):     1, 0
        libinput Send Events Mode Enabled (296):        0, 0
        libinput Send Events Mode Enabled Default (297):        0, 0
        Device Node (298):      "/dev/input/event5"
        Device Product ID (299):        2522, 6
        libinput Drag Lock Buttons (326):       <no items>
        libinput Horizontal Scroll Enabled (327):       1

Offline

 

#10  2021-09-18 14:33:53

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [solved]Jak zablokować wklejanie przy MMB?

No tal, ale przez xinput mogę co najwyżej wyłączyć MMB, a nie konkretną funkcję wklejania.
Próbowałem najprostszego rozwiązania: wyłączenia MMB z mapy i włączenia emulacji
O ile wyłącza się ślicznie - o tyle emulacja nie działa z przyczyn że nie:(
Niestety nie zdążyłem dzisiaj z tym skryptem o którym pisałem (zagonili do roboty), ale pomysł mi się podoba... może jutro się wyrobię.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#11  2021-09-19 21:17:45

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [solved]Jak zablokować wklejanie przy MMB?

Skrypcik w pythonie działa dokładnie tak jak trzeba - nie przepuszcza eventu MMB wcześniej niż sekundę po ostatnim wykrytym ruchu kółka, a i tak przepuszcza go dopiero (opóźnia), jeśli w ciągu sekundy nie zostało wykryte kółko lub został wykryty ruch myszy.
Muszę z niego tylko printy powyrzucać i umieścić gdzieś w autostarcie. No i ocztywiście ta sekunda to taka trochę prowizoryczna...

Kod:

#!/usr/bin/env python3

import evdev, time, select
from evdev import ecodes
import fcntl

fh=open(__file__,'r')
try:
    fcntl.flock(fh,fcntl.LOCK_EX|fcntl.LOCK_NB)
except:
    exit(0)

def getEvDevMouse():
    for fn in evdev.list_devices():
        dev=evdev.InputDevice(fn)
        capa=dev.capabilities(absinfo=False)
        if capa.get(ecodes.EV_REL):
            return dev
    return None

mouse = getEvDevMouse()
if not mouse:
    exit(1)

ui = evdev.UInput.from_device(mouse)
if not ui:
    exit(1)
mouse.grab()
ctrl = 0
last_timestamp = 0
kev_timestamp = 0
pending=[0,0]
def pend(now):
    if not now and pending[1] > 0 and pending[1] > time.time() - 1:
        return
    if pending[1]:
        ui.write(ecodes.EV_KEY, ecodes.BTN_MIDDLE, 1)
        pending[1] = 0
        ui.syn()
    if pending[0]:
        time.sleep(0.1)
        ui.write(ecodes.EV_KEY, ecodes.BTN_MIDDLE, 0)
        pending[0] = 0
        ui.syn()
    
        
while True:
    r,w,s = select.select([mouse.fd],[],[],0.1)
    ui.syn()
    if r:
        locked = False
        eve=mouse.read()
        for ev in eve:
            if not ev:
                break
            kev = evdev.categorize(ev)
            if isinstance(kev, evdev.KeyEvent):
                keycode = kev.keycode
                keystate = kev.keystate
                if kev.keycode == 'BTN_MIDDLE':
                    if last_timestamp > ev.timestamp()-2:
                        if kev.keystate:
                            locked=True
                    else:
                        if kev.keystate:
                            pending[1]=ev.timestamp()
                            locked=True
                        elif pending[1]:
                            pending[0]=ev.timestamp()
                            locked=True
                        kev_timestamp = ev.timestamp()
            if isinstance(kev, evdev.RelEvent):
                if ev.code == 8:
                    last_timestamp = ev.timestamp()
                    pending[0]=0
                    pending[1]=0
                    kev_timestamp = 0
                elif ev.code != 11:
                    pend(True)
            if not locked:
                pend(False)
                ui.write_event(ev)
                ui.syn()
            else:
                locked = False
    pend(False)
    
mouse.ungrab()
exit(0)

Ostatnio edytowany przez ethanak (2021-09-19 21:44:09)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#12  2021-09-20 14:28:26

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: [solved]Jak zablokować wklejanie przy MMB?

Masz pan wymagania. Nie wypowiem się odnośnie skryptu bo nie znam pythona. Jak sprawdzę to przedstawię jakieś wyniki.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)