1

bashスクリプトからgrowl通知を送信する必要がありますが、growlnotifyコマンドラインツールまたは同様の機能を実行できるperlモジュールをインストールする機能がありません。私は任意のbashスクリプトを書くことができ、このLinuxマシンで利用できるものの簡単なインベントリを作成した後、私はnetcatを持っているようです。

そのような方法でうなり声の通知を送信できますか?私はこのようなものをいじくり回してきました:

echo -ne "GNTP/1.0 NOTIFY NONE MD5:04cf1ad341ea8e51d7bb314424276c38.6162636465666768\r\nApplication-Name: test Notification-Name testtest Notification-Title: blah \r\n\r\n" | nc -v 127.0.0.1 23053

しかし、プロトコルが実際にどのように機能するかは私にはわかりません。クライアントが別のコンピューターにサブスクライブするとき、クライアントは基本的に、サーバーが接続するコンピューターのリスト(23053以上)に自分自身を登録し、フォーマットされたメッセージを送信し、応答を待ってから切断すると想定しています。私のbashスクリプトには送信先のマシンのリストが含まれている(または、おそらくリストを引数として受け入れる)ので、このサブスクリプションステップはスキップ可能である可能性があります(渡す必要のあるマジック値がない限り)。

ハッシュを正しく実行しているとは思わないか、受信通知を正しく受信するようにクライアントマシンを設定していません。

ここに何が欠けていますか?

このコマンドまたは同様のコマンドを実行すると、次のエラーメッセージが返されます。

GNTP/1.0 -ERROR NONE
Error-Code: 400
Error-Description: Invalid key hash
Origin-Machine-Name: SOMETHING
Origin-Software-Name: Growl/Win
Origin-Software-Version: 2.0.9.1
Origin-Platform-Name: Microsoft Windows NT 6.1.7601 Service Pack 1
Origin-Platform-Version: 6.1.7601.65536
X-Message-Daemon: Growl/Win
X-Timestamp: 2/5/2013 11:54:28 AM
4

2 に答える 2

1

echoエスケープ文字と-eを正しく解釈するにはフラグが必要です。\r\n

于 2013-02-04T22:18:24.250 に答える
0

ネットワーク通知の場合、パスワードを使用する必要があります。パスワードは、特定の方法でソルトおよびハッシュ化する必要があります。さらに、通知を送信するコンピューターには、1つ以上の通知タイプが定義された登録コマンドを最初に送信する必要があります。

パスワードのソルト/ハッシュを行うには、次のようにします。

# Hexify the salt:
HEXSALT=`echo -n $SALT | xxd -p`

# Md5 the password+salt
KEYBASIS=`echo -n "$PASSWORD$SALT" | $MD5SUM`
KEYBASIS=${KEYBASIS:0:32}
KEY=`echo -n "$KEYBASIS" | xxd -r -p | $MD5SUM`
KEY=${KEY:0:32}

ソルトは、少なくとも4文字のサイズである限り、完全に任意である可能性があります(また、メッセージごとに変更される可能性があります)。次に、登録メッセージを作成します。

# Now we need to build the message string.
MESSAGE="GNTP/1.0 REGISTER NONE MD5:$KEY.$HEXSALT
Application-Name: My Application
Application-Icon: http://somesite.come/whatever.png
Notifications-Count: 2

Notification-Name: startup
Notification-Display-Name: Starting
Notification-Enabled: False

Notification-Name: downtime
Notification-Display-Name: Shutting Down
Notification-Enabled: True

"
MESSAGE=`echo -ne "$MESSAGE" | $UNIX2DOS`
echo "$MESSAGE"

理論的には、アイコンはメッセージで送信できますが、私はそれを機能させることができませんでした。アイコンは少なくとも64x64である必要があります。そうでない場合、GrowlforWindowsでは奇妙に見えます。GrowlforMacまたはAppleの通知センターでは確認していません。次に、メッセージを送信するには、次のようにします。

echo "$MESSAGE" | nc -v $ipaddress 23053

おそらくnetcatを完全に排除して、bashのTCP機能(/ dev / tcp)を使用することもできますが...私はこれまでこれを使用したことがないので、方法がわかりません。最後に、通知を送信するには、次のようにします。

MESSAGE="GNTP/1.0 NOTIFY NONE MD5:$KEY.$HEXSALT
Application-Name: $APPLICATION
Notification-Name: $NAME
Notification-Title: $TITLE
Notification-Text: $TEXT
Notification-Sticky: $STICKY
Notification-Priority: $PRIORITY

"
MESSAGE=`echo -ne "$MESSAGE" | $UNIX2DOS`
echo "$MESSAGE"

App-nameとNot-nameは、登録で送信されたものと一致する必要があります。優先度は-2から2の間でなければなりません。「スティッキー」はTrue/Falseです。

于 2013-02-07T15:17:38.130 に答える