udevで実行されているプログラムはウィンドウを開くことができません。

udevで実行されているプログラムはウィンドウを開くことができません。

Pythonで書かれたスクリプトがあります。

#!/usr/bin/python3
from tkinter import messagebox
variable = messagebox.showinfo('title', 'question')

このPythonスクリプトは、画面にメッセージボックスを表示する以外は何もしません。 USBドライブをコンピュータに接続するときにこのスクリプトを起動したいと思います。

そのため、/etc/udev/rules.d/ディレクトリに10-myself.rulesという新しいファイルを作成しました。

KERNEL="sdb",RUN+="/usr/bin/python3 /home/user/projects/path_to_python.py"

ただし、USBドライブをコンピュータに接続すると、メッセージボックスは表示されません。エラーはどこにありますか?どのようにデバッグできますか?

私も命令を呼んだ

udevadm control --reload-rules

ルールを次に変更してみました。

KERNEL="sdb*",RUN+="/usr/bin/python3 /home/user/projects/path_to_python.py"

または規則に従って

KERNEL="sdb1",RUN+="/usr/bin/python3 /home/user/projects/path_to_python.py"

スクリプトを次に変更すると

file1 = open("/home/user/udev.txt", "w")
file1.write("Hello")
file1.close()

これでこのスクリプトが機能します。

ベストアンサー1

コードがrootまたはudevユーザーとして実行されており、そのユーザーにはウィンドウマネージャとチャットしてTkウィンドウなどを作成する権限がないようです。ログエントリを作成するudevスクリプト、ウィンドウマネージャ環境のもう一方の端がメッセージを読み、適切なアクションを実行できるソケットにメッセージを送信するなど、一部の種類の通信が役立ちます。

おすすめ記事