Hafta sonu bununla uğraştım ve fare düğmelerimi yeniden eşleştirmem gerekiyor.
Hafta sonu bununla uğraştım ve fare düğmelerimi yeniden eşleştirmem gerekiyor.
Yanıtlar:
9 düğmeli bir Logitech farem var ve "orta düğmeye" (# 2) basmak kaydırma tekerleğine tıklamayı içeriyor. Bunu sevmedim çünkü beceriksizim ve genelde tekerleği tıklamaya çalıştığım pencereyi kaydırıyorum. Bu yüzden otomatik olarak üstteki düğmeyi (bu durumda # 9) ortadaki düğmeye (# 2) yeniden eşlemek istedim. Ayrıca alt taraftaki düğmeyi (# 8) eşlemek istedim, böylece sol tuşa (# 1) çift tıklayacaktı.
Hedeflerim belirli olsa da, aşağıdaki çözümler başlangıçta fare düğmelerini otomatik olarak yeniden eşleştirmek istediğiniz herhangi bir duruma genelleştirilebilir.
xinput
Bu görev için yüklü olması gerekir . Bu tamamen .xsessionrc
dosyanızda yapılabilir . İlk xinput
önce, farenize atanmış olan adı bulmak için kullanın, bu daha sonra bir giriş aygıtı kimliğiyle ilişkilendirilir. Aşağıda dizüstü bilgisayarımdan bazı örnek çıktılar var:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Farem kendisini çağırıyor Logitech USB Laser Mouse
ve olarak gösterilir id=11
. Farenizin farklı bir adı olacak; Bunun, okuyucu için bir egzersiz olarak bırakıldığını bulmak.
Bu oturumda cihazın kimliğini hala biliyor olsanız da , giriş işleyicisinin farenizi kullanarak ne kadar butonu olduğunu öğrenin . Bu, cihazda görünen buton sayısından farklı olabilir.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
Farem ile, sadece 9 bariz fiziksel düğme var, ancak xinput
16 rapor ediyor.
USB'nin niteliği göz önüne alındığında, bu kimlik, her yeniden başlatışınızda değişebilir, bu nedenle bir kez keşfettiğiniz bir kimliğe statik olarak anahtarlanmış bir şeyi kodlamak yeterli değildir. Bunu başlangıçta dinamik olarak ayrıştırmanız ve mevcut kimliğe dayalı olarak yeniden haritanızı yürütmeniz gerekir.
Artık adını bildiğinize göre, xinput test
hangi anahtarın yeniden eşleştirileceğini bulmak için kullanabilirsiniz. Dizinlerini almak için, haritadan eşlemek istediğiniz fare düğmelerine basın. (Referans için, 1, 2 ve 3 "her zaman" (yani, genellikle), 3 düğmeli bir farenin sol, orta ve sağ düğmelerini gösterir. Sık kullanılan bir harita, fareyi solak yapmak için bunları tersine çevirir. )
button press 2
button release 2
button press 9
button release 9
Bu durumda # 9 (yan, üst) butonunu # 2 (orta) butonu ile eşlemek istediğimi öğrendim.
Artık farenizin ne olduğunu ve hangi düğmeleri değiştirmek istediğinizi bildiğinize göre , başlangıçta düğmenin yeniden eşlenmesini yürütmek için ~/.xsessionrc
çağıran bir komut dosyası yazabilirsiniz xinput
. Komple betiğim aşağıda.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Buradaki ilk satır, bildirildiği gibi farenin kimliğine eşit bir geçici oturum değişkeni belirler xinput
. Bu, grep
rapordaki farenin bilinen adı için girilerek xinput
, daha sonra rapordaki belirteçten sed
kimlik numarasını çıkarmak için kullanılarak yapılır id=xxx
. Bu değer daha sonra xinput set-button-map
yeniden haritalamayı yürüten bir yönergede kullanılır . Yukarıdaki örnekte, tek değişiklik, # 9 düğmesinin # 2 mimik düğmesiyle yeniden eşleştirilmesidir. Diğerleri varsayılan ayarlarında kalır.
Güncelleme: As @Lokasenna işaret aşağıya Cihazınız fare ve bir klavye hem kendisini bildiriyorsa, sen sonucu sayımını sınırlamak gerekebilir grep
kullanarak -m 1
.
Ayrıca bu cevaba bakınız .
Sen gerekir xinput
, xbindkeys
ve xautomation
(dahil xte
) bu görev için yüklü.
Kullanım xinput list
ve xinput test
Farenizin cihaz kimliğini ve atamak istediğiniz düğmenin sayısını bulmak için. Benim durumumda, alt taraftaki düğmeyi (# 8) soldaki düğmeyi (# 1) çift tıklatarak eşlemek istedim.
Oluştur ya da düzenle ~/.xbindkeysrc
. Bu dosyanın formatı bir dizi eşleştirilmiş çizgidir. İlk satır bir olay için yürütülecek komuttur; ikinci satır olay açıklamasıdır. Olaylarını doğrudan girdi işleyicisine göndermek için xte
bileşenini kullanacağız xautomation
.
Bir düğme bırakıldığında çift tıklatma olayı oluşturmak için aşağıdakileri ekledim:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Bu yapılandırma # 1 düğmesine iki fare tıklamasıyla # 8 düğmesinin serbest bırakılmasını gösterir. (Teoride sanırım herhangi bir komutu bir fare düğmesine eşleyebilirsiniz , ancak bu en yaygın durumdur. Diğer pratik örnekler için bu cevaba bakınız .)
Sisteminize bağlı birden fazla fare bulunan kullanıcılar için, cihazın kimliğini de girmeniz gerekir. Bu, tüm kullanıcılar için geçerli olmayabilir ve Unity ile Ubuntu 16.04'te keşfedildi.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Ardından .xbindkeysrc dosyasını, komut çıkışındaki id = değerine başvurarak değiştirin (bu örnekte id = 9):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
ifademi, sed
örneklerimdeki ifadenizle değiştirdim. Gelişme için teşekkürler!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
faremi iki kere gösteriyor, bunun gibi: ↳ USB OPTICAL MOUSE id = 12 [slave pointer (2)] ↳ USB OPTICAL MOUSE id = 13 [slave pointer (2)] Yalnızca ID 13 komutları yakalar xinput test
. Betik daima ilk kimliği yakalar. Ama neden yine de iki kere? Her ikisi de bu fareyi çıkardığımda kayboluyor ve bağlandığımda yeniden beliriyor.
Bunun için kısa adımlar:
Denilen bir yardımcı program var xinput
. xinput list
ya da sadece xinput
tüm X giriş aygıtlarını ve kimliklerini gösterecektir. Burada yeniden eşlemek istediğiniz farenin kimliğini bulabilirsiniz.
Kimliğimi örnek olarak kullanacağım, 21 olan kurulumumdan sonra xinput --get-button-map 21
çıkacak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Şimdi, söylemek istiyorsan, sola ve sağa düğmelerini değiştir
xinput --set-button-map 21 3 2 1
İşte burdayız, yeniden yapılanma tamamlandı.
Başlangıçta çalıştırmak için bu sadece bir dosyaya koyun:
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
çalıştırılabilir izin vermek
chmod +x leftmouseremap.sh
Son olarak, CLI dan eğer istersen, GUI elle Statrtup Uygulamaya bu ekleyebilir veya aşağıda koymak metin Gözlerinde farklı bir dosya inti (sizinkine değişim yolları) ~/.config/autostart
burada (mayın olduğunu less .config/autostart/leftmouseremap.sh.desktop
):
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
KDE ile yolun böyle olacağını ~/.kde/Autosart
, başkalarının Masaüstü yöneticileri için bu durumun farklı olabileceğini unutmayın. Alternatif olarak, başlangıçta çalıştırma kullanarak genel bir yaklaşımla yapılabilir /etc/rc.local
.
Kullanırken zerobandwidth harika cevabı , bu tür Logitech'in MX Ergo gibi bazı cihazlar, bir ikisi olarak gösterilir pointer ve bir klavye cihazına:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
Sonuç olarak, grep "Logitech MX Ergo"
iki değer döndürerek sona erer. İkincisi, eşleme dizisine ilk öğe olarak dahil edilir ve tüm fare düğmelerinizi mahveder.
Düzeltme kolaydır - sadece grep
maksimum sayım argümanını kullanın -m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Logitech faremin orta düğmesinin eşlemesini Ubuntu Yazılım Merkezi'nden indirdiğim Easystroke Hareket Tanıma özelliğini kullanarak 'Geri' olarak değiştirebildim. Düzenleme: Uygulamada, Eylem Ekle, Adlandır, anahtar türünü seçin, Ayrıntılar'a tıklayın ve Enter tuşuna basın, Kayıt Strokuna basın ve komut istemi sırasında orta düğmeye basın.
xinput
görünmeyen düğmelerle kullanmak istediğimizde yardımcı olur xinput list <devID>
.
12.04'ten önce, standart depoda "btnx" adı verilen ve Sistem Yapılandırmasında "Düğme özellikleri" olarak eklenen kolay bir grafik aracı vardı. Ne yazık ki, ancak bırakıldı. Şu anda 14.04, 16.04 ve 18.04'te tutulan bir "güvenilmeyen" PPA burada: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa ( https://launchpad.net/ubuntu/xenial/+source adresinde bulunur. / btnx )
Sistem ayarlarıyla bütünleşmeyecek, ancak ucuz bir 5 düğmeli fare ile dizüstü bilgisayarımda gayet iyi çalışıyor. Tuş vuruşlarına ve komutlarına da yeniden basılabilir ve yapılandırma diğer yöntemlerden çok daha basittir!
HP elitebook 2570p, Ubuntu 18.04.2 var. Burada benim için işe yaramaz bir iz puanım var ve işte alanın altında 2 işe yaramaz iz düğmesi
Bu tuşları kullanmıyorum çünkü dokunmatik yüzeyin altında. Bu düğmeyi left = back_button (Alt_L + Left), sağdaki = middle_mouse_button olarak yeniden eşlemek istiyorum. "Xinput" içindeki iz noktası id = 11 ve sol düğme 1, sağ 3'tür.
Biri sadece terminale kopyalamak için bana doğru kodu yazabilir mi? Xbindkeysrc ile birleştirdim ancak bu, her iki işlemi de (izleme noktası ve dokunmatik yüzey) düğmelere göre ayarlıyor
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'