2

cron ジョブから KDE のノットファイに通知を送信しようとしています。以下のコードは正常に動作しますが、cron ジョブとして実行すると通知が表示されません。

#!/usr/bin/python2
import dbus
import gobject

album = "album"
artist = "artist"
title = "title"
knotify = dbus.SessionBus().get_object("org.kde.knotify", "/Notify")
knotify.event("warning", "kde", [], title, u"by %s from %s" % (artist, album), [], [], 0, 0, dbus_interface="org.kde.KNotify")

これをcronジョブとして実行する方法を知っている人はいますか?

4

1 に答える 1

2

という環境変数を指定する必要がありますDBUS_SESSION_BUS_ADDRESS

実行中の kde セッションから値を取得できます。

$ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-iHb7INjMEc,guid=d46013545434477a1b7a6b27512d573c

kde スタートアップ (構成の autostart モジュール) で、環境の起動後に実行するスクリプト エントリを作成します。この環境変数の値をホーム ディレクトリの一時ファイルに出力すると、一時ファイルから cron ジョブまたは Python スクリプト内で環境変数を設定できます。

#!/bin/bash
echo $DBUS_SESSION_BUS_ADDRESS > $HOME/tmp/kde_dbus.session

2019 KDE5 の時点でも動作しますが、結果はわずかに異なります。

$ echo $DBUS_SESSION_BUS_ADDRESS 
unix:path=/run/user/1863/bus

テストするには、次の操作を実行できます。

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver SimulateUserActivity

qdbus-qt5kde5 と一緒に古い kde4 バイナリがインストールされている場合は、使用する必要があるかもしれません。次の方法で、どちらを使用するかを決定できます。

export QDBUS_CMD=$(which qdbus-qt5 2> /dev/null || which qdbus || exit 1)

スクリーンセーバーが機能しないようにしたい場合は、sleep ステートメントを使用してこれを実行します。メインのコンピューターの横にある別のコンピューターからリモートで実行します。

リモートスクリーンセーバーをロックおよびロック解除する方法を知りたい人のために、それは別のコマンドです...

loginctl lock-session 1

また

loginctl unlock-session 1

それはあなたのセッションが最初のものであると仮定しています。スクリーンセーバーの開始と停止の KDE 通知イベントにスクリプトを追加できます。この情報が、複数のコンピューター間でスクリーン セーバーを同期したい人に役立つことを願っています。

これが長い答えであることは承知していますが、テストするための例と、今日それを使用する実際の使用例を提供したかったのです。

于 2013-03-02T15:28:41.823 に答える