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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1



Użytkownik
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)
Offline



Redaktor




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





Cenzor wirtualnego świata
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





Cenzor wirtualnego świata
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
$ while true; do echo -n | xsel -n -i && sleep 0.1; done
Ostatnio edytowany przez morfik (2021-09-16 21:30:10)
Offline



Użytkownik
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)
Offline



Redaktor




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



Użytkownik
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.
Offline



Redaktor




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



Redaktor




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ć:
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): 1Offline



Użytkownik
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ę.
Offline



Użytkownik
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...
#!/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)
Offline



Redaktor




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