TNTMaster
Anmeldungsdatum: 30. Juli 2009
Beiträge: 851
|
Hallo, Da Signal Desktop bei eingehender Nachricht keine akustische Benachrichtigung ausgibt, hab ich mir ein Skript erstellt, das die Terminalausgabe auswertet und bei Treffer (eingehende Nachricht, Zeile 16 der Beispielausgabe) eine Audio Datei abspielt. Das hat mit älteren Versionen bisher gut funktioniert. Jetzt scheint es so, als ob ein Teil der Ausgabe nicht auf stdout oder stderr landet. Mit
| /opt/Signal/signal-desktop --start-in-tray --disable-gpu >/tmp/output 2>&1
|
landen nur die ersten 12 Zeilen der Ausgabe in /tmp/output, ansonsten nichts. Beispielausgabe Terminal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | Set Windows Application User Model ID (AUMID) { appUserModelId: 'org.whispersystems.signal-desktop' }
NODE_ENV production
NODE_CONFIG_DIR /opt/Signal/resources/app.asar/config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME undefined
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
userData: /home/tnt/.config/Signal
config/get: Successfully read user config file
config/get: Successfully read ephemeral config file
making app single instance
{"name":"log","hostname":"myHost","pid":29829,"level":30,"msg":"app ready","time":"2020-01-21T18:53:16.110Z","v":0}
{"name":"log","hostname":"myHost","pid":29829,"level":30,"msg":"starting version 1.29.6","time":"2020-01-21T18:53:16.110Z","v":0}
{"name":"log","hostname":"myHost","pid":29829,"level":30,"msg":"updateSchema:\n Current user_version: 18;\n Most recent db schema: 18;\n SQLite version: 3.28.0;\n SQLCipher version: 4.2.0 community;\n (deprecated) schema_version: 43;\n","time":"2020-01-21T18:53:16.116Z","v":0}
{"name":"log","hostname":"myHost","pid":29829,"level":30,"time":"2020-01-21T18:54:20.245Z","msg":"Sending message to conversation +[REDACTED]060 with timestamp 1579632860245","v":0}
|
Wie läßt sich die Ausgabe nun greppen? Gruß TNT
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3532
|
Was kommt denn an, wenn du das 2>&1 am Ende mal weglässt?
|
TNTMaster
(Themenstarter)
Anmeldungsdatum: 30. Juli 2009
Beiträge: 851
|
Sobald ich die Ausgabe umleite, mit oder ohne 2>&1, wird im Terminal nichts ausgegeben und in der Datei sind auch nur die ersten Zeilen der Ausgabe. Wenn ich die Ausgabe mittels pipe an grep, etc. weiterleite, das gleiche: Es gehen alle Zeilen mit '{' am Anfang verloren.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
TNTMaster schrieb: Sobald ich die Ausgabe umleite, mit oder ohne 2>&1, wird im Terminal nichts ausgegeben und in der Datei sind auch nur die ersten Zeilen der Ausgabe. Wenn ich die Ausgabe mittels pipe an grep, etc. weiterleite, das gleiche: Es gehen alle Zeilen mit '{' am Anfang verloren.
Klingt, als ob das Programm auswertet, wohin Stdout geht und dann entsprechend die Ausgabe anpasst. Gibt es vielleicht eine Kommandozeilenoption für "verbose", die die Zeilen wiederbringt? Ansonsten fällt mir nur ein etwas mit tmux zu hacken, das die Ausgabe auffängt und dann als Datei verfügbar macht. Aber das wird eklig.
|
TNTMaster
(Themenstarter)
Anmeldungsdatum: 30. Juli 2009
Beiträge: 851
|
Mit tmux habe ich keine Erfahrung, wie ich das umsetzen könnte. Eine Kommandozeilenoption, um das Verhalten zu beeinflussen finde ich gerade auch nicht ☹ Anderer Ansatz: Signal schreibt alle Ausgaben nach ~/.config/Signal/logs/log.log (log.log.0 etc.) Diese Datei könnte ich auswerten, allerdings rotieren diese regelmäßig(logrotate), da muß ich mir noch überlegen, wie ich nach dem logrotate wieder an die aktuelle Ausgabe komme.
|
TNTMaster
(Themenstarter)
Anmeldungsdatum: 30. Juli 2009
Beiträge: 851
|
Hab nun ein Skript erstellt, das die Log Datei auswertet. Hat auch schon ein logrotate überstanden. Werde jetzt noch ein paar Tage testen, ggf. eine korrigierte Version veröffentlichen und das Thema als gelöst setzen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #!/bin/bash
wav="$HOME/Musik/signal.wav"
logfile="$HOME/.config/Signal/logs/log.log"
strg="Sending message to conversation"
/opt/Signal/signal-desktop --start-in-tray --disable-gpu >/dev/null 2>&1 &
signal_pid=$!
type inotifywait >/dev/null || exit
while ps $signal_pid; do
while read line; do
grep "$strg" <<<"$line" && aplay "$wav"
done < <(tail -f -n 0 "$logfile") &
loop_pid=$!
inotifywait -e close_write "$logfile"
kill $loop_pid
done >/dev/null 2>&1
|
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5323
|
rklm schrieb: Klingt, als ob das Programm auswertet, wohin Stdout geht und dann entsprechend die Ausgabe anpasst.
Das ist moeglich? Ich haette noch darauf getippt, dass der gestartete Prozess vielleicht nur als Startet fungiert und einen weiteren Prozess startet, der dann die eigentliche Funktion bereitstellt. Waere das der Fall, waere die Shell aber nicht mehr "blockiert".
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6339
Wohnort: Hamburg
|
Das ist moeglich?
Ich denke schon, wüsste jetzt aber auch nicht wie das geht. Aber es ist relativ einfach mit ioctl() die Breite eines Terminals abzufragen. Und diese ist bei Umleitung in eine Datei 0! | if( ioctl( STDOUT_FILENO, TIOCGWINSZ, &term_win ) == -1 ){
term_win.ws_row = 24;
term_win.ws_col = 132; /* wg. Ausgabeumleitung in Datei */
}
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
sebix schrieb: rklm schrieb: Klingt, als ob das Programm auswertet, wohin Stdout geht und dann entsprechend die Ausgabe anpasst.
Das ist moeglich?
| $ tty; echo $?
/dev/pts/0
0
$ tty </dev/null; echo $?
not a tty
1
$ tty <&-; echo $?
not a tty
1
|
Ich habe auch schon Programme gesehen, die ihre Ausgaben entsprechend anpassen - mir fällt nur gerade keins ein. Halt: Using color to distinguish file types is disabled both by default and with --color=never. With --color=auto,
ls emits color codes only when standard output is connected to a terminal. The LS_COLORS environment variable
can change the settings. Use the dircolors command to set it. Manchmal liegt es so nahe. 😉
Ich haette noch darauf getippt, dass der gestartete Prozess vielleicht nur als Startet fungiert und einen weiteren Prozess startet, der dann die eigentliche Funktion bereitstellt. Waere das der Fall, waere die Shell aber nicht mehr "blockiert".
Ja, man würde das an einem Prompt erkennen, der irgendwo zwischen der Ausgabe des zweiten Prozesses landet. Ist hier eher unwahrscheinlich, würde ich sagen.
|
TNTMaster
(Themenstarter)
Anmeldungsdatum: 30. Juli 2009
Beiträge: 851
|
Soweit ich sehe, funktioniert das Skript. Den Suchstring habe ich noch geändert, da sonst auch bei ausgehenden Nachrichten Sound ertönt. Zeile 5 geändert auf:
|