저는 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
설정이 올바른 것이 확실합니까 ? 장치에서 환경을 덤프하고 이를 일반 셸 환경과 비교해 보는 것이 좋습니다.