Klavye değiştiricilerinin serbest bırakılması zorlama


18

Bazen, bir tam ekran VirtualBox konuk kullanırken makinelerim arasında sinerji kullandığımda, bazı garip tuş değiştiricileri açık kaldı. Klavyemde varsa (Shift_L gibi) sadece ona dokunabilirim ve durumları sıfırlanır ve küçük harflerle yazmaya devam edebilirim. Ama bazıları benim klavyemle eşleşmiyor (ISO_Level3_Shift gibi), bu yüzden onları hiç kapatmanın bir yolu yok!

Onları nasıl sıfırlayabilirim? Şu anda yapabileceğim tek şey bilgisayarı yeniden başlatmak, ancak oldukça utanç verici bir çözüm.

Tüm istediğim yapay olarak tüm olası klavye değiştiricilerine "dokunabilen" bir programdır, bu yüzden durumları sıfırlanır. Bu yapılabilir mi?

Mint 14 kullanıyorum (Ubuntu 12.10 Quantal klonu).

Yanıtlar:


22

Eğer varsa xdotoolkurulu, sadece basitçe kullanabilirsiniz

xdotool keyup ISO_Level3_Shift

Bu da X sunucusuna bir anahtar sürümü (ISO_Level3_Shift için elbette) gönderir.

Ancak bir programın tüm değiştirici tuşlarını serbest bırakmasını istediniz. Bir kolayca elde etmek için xdotool kullanabilirsiniz, bunun için değilse hangi değiştirici keysyms tanımlanmış hakkında hiçbir fikrim yok. Onları bulmanın olası bir yöntemi ayrıştırmaktır keysymdef.h:

grep '^#define' /usr/include/X11/keysymdef.h | sed -r 's/^#define XK_(\S*?).*$/\1/;' | grep -E '_(L|R|Level.*)$'

Bu, kesinlikle değiştirici olan bazı anahtarları döndürür. Ne yazık ki, şu anda bir değiştirici anahtarın kesin bir tanımını bulamıyorum, bu yüzden tam bir liste olup olmadığını bilmiyorum.

Ekleme | xargs xdotool keyupyukarıdaki boru hattına tüm bu anahtarları yayınlayacak. Sistemimde şu komutu yürütür:

xdotool keyup Shift_L Shift_R Control_L Control_R Meta_L Meta_R Alt_L Alt_R Super_L Super_R Hyper_L Hyper_R ISO_Level2_Latch ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock ISO_Level5_Shift ISO_Level5_Latch ISO_Level5_Lock

1
Harika! Ayrıca, atanmamış anahtarların, örn xdotool keyup 204.
Adam Spires

1
@Adam Spiers bana ipucu verdi. Benim durumum için anahtar kodu, örneğin 204 gibi bir xmodmap koduydu ve keysymdef.h kullanmak yardımcı olmadı. Xmodmap anahtar kodlarını görmek için deneyin: DISAPLAY=:1 xmodmap -pk | grep -iP 'alt|meta|super|hyper'. Ekran numarasını kırık VNC ekran numaranız olarak değiştirmeniz gerekecektir.
srking

DISPLAY=:1Yukarıdaki yorumda kastettiğini düşünüyorum .
Adam Spires

1
xdotool/ / --clearmodifiersiçin bir seçeneği destekliyor olabilir - belki de bu cevap yazılırken olmadı? Bunun işe yarayacağını umuyorum. ( bir anahtarın belirtilmesini gerektirir; “boşluk” keyfi.)keykeydownkeyupxdotool keyup --clearmodifiers spacexdotool keyup
Rory O'Kane

6

Sistemim için, gönderilen çözümün xdotoolgenellikle sıkışmış olan anahtarı kapsamadığını ve çalışmanın setxkbmapsistemimde hiçbir şey başaramadığını keşfettim .

Şimdiye kadar başarısız olan keşfettiğim çözüm kullanmaktır x11vnc. Özellikle, aşağıdaki komutu kullanın:

x11vnc -deny_all -clear_keys -timeout 1

-clear_keysburada kilit kısımdır. Bu talimat x11vnco çıktığında tüm basılı tuşları temizleyin. bağlantı olmadan 1 saniye sonra çıkmayı -timeout 1söyler x11vncve -deny_allbu pencere sırasında kimsenin bağlanamayacağından emin olur.

Bazen takılan anahtar, masaüstüyle anlamlı bir etkileşimi önler, bu durumda aşağıdakileri ssh üzerinden yürüteceğim:

env DISPLAY=:0 XAUTHORITY=/home/[username]/.Xauthority x11vnc -deny_all -clear_keys -timeout 1

4

Ben argüman olmadan "setxkbmap" kullanıyorum. Klavyeyi sıfırlıyor gibi görünüyor. Panelimde, klavye tamamen çalışmadığında fare ile kullanabileceğim bir "kısayol" var.


0

x11vncCevap ustaca, ama yüklemeden eğer x11vnctakas değiştiricileri için sadece overkill gibi görünüyor, burada kullandığı bir Bash çözüm xmodmap -pm'ın çıkış bilinen tüm değiştiriciler için keyUp sorunu. Onaltılıdan ondalık anahtara dönüştürme Bash'in aritmetik genişlemesine dayanır.

for KEYCODE in $(xmodmap -pm | grep -Pio '(?<=\b0x)[0-9a-f]+\b'); do

    echo -e "xdotool keyup $((16#$KEYCODE))\n" >&2
    xdotool keyup $((16#$KEYCODE))

done

Bir klavye kısayolundan çalıştırıyorsanız sleep 1, başlangıçta ekleme (fiziksel tuşların serbest bırakılması için zaman tanımak için) iyi tavsiye edilir. echoStderr'e elbette gerekli değildir; Ben sadece böyle ~/.xsession-errorsçıktı için dosyamı kontrol edebilmek istiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.