プラグインでUSBキーボードのレイアウトを自動的に変更するためにこのスクリプトを書きました
import pyudev
from subprocess import call
monitor = pyudev.Monitor.from_netlink(pyudev.Context())
monitor.filter_by('usb')
def kbd_event(action, device):
if action == 'add':
call(["setxkbmap", "carpalx"])
observer = pyudev.MonitorObserver(monitor, kbd_event)
observer.start()
setxkbmap carpalx
bashで入力すると機能しますが、上記のコードのレイアウトは変更されません。だから私はbashでこれをしました:
setxkbmap carpalx
xmodmap -pke > carpalx2
上記の呼び出し行をに変更しcall(["xmodmap", "./carpalx2"])
、スクリプトが機能するようになりました。次の問題があります。
- コードで xmodmap が機能し、setxkbmap が機能しないのに、bash では両方が機能するのはなぜですか?
- 現在、kbd_event はすべての USB イベントに対して呼び出され、
call(["xmodmap", "./carpalx2"])
プラグインするすべての USB デバイスに対して実行されます。キーボードを挿入したときにのみレイアウトが変更されるように、イベントをさらにフィルタリングするにはどうすればよいですか?
現在のコードでは、マウスを接続するたびにキーボード レイアウトが変更されます :)