私はUbuntu 20.10とPython 2.7を使用しています。主キーバインディングを無視するbashスクリプトがあり、端末で実行すると常に機能します。ここにスクリプトがあります。
#!/bin/bash
xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY
.bashrc
また、新しい端末を開くときに常に実行されるようにファイルに追加しました。問題は、私はスタンディングデスクを持っていますが、高さを調整するときにキーボードの接続が切断されて再接続され、カスタムキーバインディングを再適用するには、新しい端末を再度開く必要があることです。
私が思いついた最高の解決策は、キーボードが接続された後にbashスクリプトを実行するシステム化されたPythonタスクを作成することでした。 Pythonスクリプトのみを単独で実行すると、ほとんど機能せず、キーボードの接続が切断されて再接続され、キーバインディングが上書きされますが、新しいキーバインディングがスクリプトで機能しないときにPythonスクリプトがbashを呼び出すことをsyslogで見ることができます。これはPythonスクリプトです。
#!/usr/bin/python
import functools
import os.path
import pyudev
import subprocess
def main():
BASE_PATH = os.path.abspath(os.path.dirname(__file__))
path = functools.partial(os.path.join, BASE_PATH)
call = lambda x, *args: subprocess.call([path(x)] + list(args))
context = pyudev.Context()
monitor = pyudev.Monitor.from_netlink(context)
monitor.filter_by(subsystem='usb')
monitor.start()
for device in iter(monitor.poll, None):
name = 'Freestyle_Edge_Keyboard'
if device.get('ID_MODEL') == name:
subprocess.call(['sh', '/home/user/scripts/loadKeyboardOverwrites.sh'])
if __name__ == '__main__':
main()
systemd操作を開始すると、syslogでキーが上書きされることがわかりますが、うまくいかず、syslogで少し不審なのはメッセージxkb_variant & xkb_options requires a string value
とエラーだけです。myswap
Mar 24 21:33:32 user callShOnKeyboardPlugin.py[1533582]: Error: Can't find file "myswap" for symbols include
Mar 24 21:33:32 user callShOnKeyboardPlugin.py[1533582]: Exiting
Mar 24 21:33:32 user callShOnKeyboardPlugin.py[1533582]: Abandoning symbols file "(null)"
Mar 24 21:17:01 user /usr/libexec/gdm-x-session[28481]: (**) Option "xkb_model" "pc105"
Mar 24 21:17:01 user /usr/libexec/gdm-x-session[28481]: (**) Option "xkb_layout" "sk"
Mar 24 21:17:01 user /usr/libexec/gdm-x-session[28481]: (WW) Option "xkb_variant" requires a string value
Mar 24 21:17:01 user /usr/libexec/gdm-x-session[28481]: (WW) Option "xkb_options" requires a string value
myswap ファイルは ~/.xkb/symbols/myswap にあります。
これがsystemdの仕事です
[Unit]
Description=desc
[Service]
ExecStart=/home/user/scripts/callShOnKeyboardPlugin.py
Restart=always
Environment="PYTHONPATH=$PYTHONPATH:/home/user/.local/lib/python2.7/site-packages"
[Install]
WantedBy=multi-user.target
問題がどこにあるかを知っている人はいますか?それとも他のより良い方法がありますか?どんな助けでも大変感謝します。
抜けたものがあればお知らせいただければご提供させていただきます。
修正する
私は別の方法でアクセスします。これをスタートアップスクリプトに設定し、キーボードが検出された後にいくつかの遅延を追加して一貫して動作させました。
答え1
私の考えでは、あなたはそれを設定する必要があると思いますWorkingDirectory = /home/user
。$DISPLAY
設定が正しいことがわかりますか?デバイスから環境をダンプし、それを通常のシェル環境と比較することをお勧めします。