xkbが 'myswap'ファイルのシンボルを見つけることができません。システムPython操作にエラーがあります。

xkbが 'myswap'ファイルのシンボルを見つけることができません。システムPython操作にエラーがあります。

私は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設定が正しいことがわかりますか?デバイスから環境をダンプし、それを通常のシェル環境と比較することをお勧めします。

おすすめ記事