Linux

為什麼以下 osd_cat 腳本會失敗?

  • October 12, 2017

我正在編寫一個osd_cat基於簡單的實用程序來顯示通過 libpurple 收到的消息(例如,通過 Finch 或 Pidgin)。

到目前為止,這是我設法創建的:

dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '/string/ && (NR%2==1) {split($0, sender, "\"") }; /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }' | osd_cat --pos=top --align=right --indent=8 -O 4 -u white

或分成多行以增強閱讀樂趣:

dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg"
| awk '/string/ && (NR%2==1) {split($0, sender, "\"") };
       /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }'
| osd_cat --pos=top --align=right --indent=8 -O 4 -u white

我做了一些實驗,發現以下工作:

yes | osd_cat
echo "text" | osd_cat
dbus-monitor | osd_cat
dbus-monitor | awk '{print $0}' | osd_cat
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | osd_cat

但以下不起作用:

dbus-monitor | awk '{print $1 $2}' | osd_cat
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '{print $0}' |osd_cat

我完全迷路了。

老問題,但對於Google人來說:

我遇到了類似的問題,但規模要簡單得多。我只是想做

echo "Some string\nWith a bunch of chars" | osd_cat

我發現 osd_cat 似乎存在一些問題,要麼是延遲檢測 OSD 機制的可用性,要麼是輸入緩衝問題。

如果輸入字元串太長(在我的系統上它在 7 到 11 個可列印字元之間變化),它將掛起延遲時間,然後退出而不顯示任何內容。

如果我使用--waitosd_cat 選項,我的問題就消失了。

然而,副作用是消息可能需要超過 5 秒才能出現(在我的系統上)。您為 osd_cat 指定的任何延遲時間僅在消息至少可見時才開始,但這可能意味著要在預設 5 秒內顯示的消息將需要 5 秒才能顯示,然後在消失之前再顯示 5 秒。

在相關的說明中,這似乎也是所有建構在 osd_cat 之上的工具的問題,並且沒有一個可以解決這個問題。原作者的這些工具列表在他的頁面上(在 osd_cat 的手冊頁上列出):http://ignavus.net/xosd

包括更常見的osdsh,這是我試圖找到的替代方法因為,當我偶然發現osd_cat.

引用自:https://unix.stackexchange.com/questions/25890