スクリプトからdbusクライアントを起動するには?

スクリプトからdbusクライアントを起動するには?

私は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クライアントを起動した後にスクリプトを完成させる必要があります。

この問題をどのように解決できますか?

ベストアンサー1

おすすめ記事