私はdbusサービス(他のユーザーによって開始された)からメッセージを受け取ると、デスクトップ通知を表示するPythonで書かれたdbusクライアントを開発しました。
dbus クライアントコードは次のとおりです。
#!/usr/bin/python3
from gi.repository import Gtk
from gi.repository import Notify
import dbus
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
def msg_handler(*args,**keywords):
try:
#show notification to desktop
Notify.init('Pendrive Reminder')
notify = Notify.Notification.new('Pendrive Reminder', 'Shutdown lock enabled. Disconnect pendrive to enable shutdown')
notify.show()
except:
pass
bus.add_signal_receiver(handler_function=msg_handler, dbus_interface='org.preminder', path_keyword='path')
Gtk.main()
今スクリプトからdbusクライアントを起動したいと思います。ただし、スクリプトが完了したときに死ぬのを防ぐには、このdbusクライアントが必要です。
また、特定の(rootではない)ユーザーとしてdbusクライアントを起動する必要があります。スクリプトはrootとして実行されます。
私はこれを試しました:
nohup su user -c '/usr/bin/pendrive-reminder/client.py' &
ただし、コマンドが完了した後もスクリプトはロックされたままになり、「期限切れ」のプロセスとして表示されます。したがって、dbusクライアントを起動した後にスクリプトを完成させる必要があります。
この問題をどのように解決できますか?