現在アクティブなウィンドウに現在の日付と時刻 (つまり、デジタル時計の数字) を表示することは現在/技術的に可能ですか? スクリプトからテキストを追加するようなものですか?
答え1
アクティブウィンドウのタイトルに日付と時刻を表示する
以下のスクリプトを実行すると(編集版)これです) をバックグラウンドで実行すると、最前面のウィンドウに現在の日付と時刻が表示されます。
ウィンドウがフォーカスを失った場合、時間は更新されません。最前面のウィンドウのみ、時間が更新されます。意思更新されます。
スクリプトは日付と時刻も表示しますタブあたりタブを使用するアプリケーションでは、firefox
またはgnome-terminal
スクリプト
#!/usr/bin/env python3
import subprocess
import time
cmd = "xdotool", "getwindowfocus"
get_name = "xdotool", "getactivewindow", "getwindowname"
currtime_1 = time.strftime("%d-%m-%Y %H:%M"); wid_1 = subprocess.check_output(cmd).decode("utf-8").strip()
wname_1 = subprocess.check_output(get_name).decode("utf-8"); wname_1 = wname_1[:wname_1.rfind(" | ")]
while True:
time.sleep(2)
currtime_2 = time.strftime("%d-%m-%Y %H:%M")
try:
wid_2 = subprocess.check_output(cmd).decode("utf-8").strip()
wname_2 = subprocess.check_output(get_name).decode("utf-8"); wname_2 = wname_2[:wname_2.rfind(" | ")]
if any([wid_2 != wid_1, currtime_2 != currtime_1, wname_2 != wname_1]):
cmd2 = ["xdotool", "set_window", "--name", wname_2+" | "+str(currtime_2), wid_2]
subprocess.Popen(cmd2)
currtime_1 = currtime_2; wid_1 = wid_2
except subprocess.CalledProcessError:
pass
使い方
スクリプトでは
xdotool
sudo apt-get install xdotool
以下のスクリプトを空のファイルにコピーし、
show_datetime.py
次のコマンドでテスト実行します。
python3 /path/to/show_datetime.py
新しいウィンドウを開くか、既存のウィンドウにフォーカスを当てます。日付と時刻は 1 ~ 2 秒以内にウィンドウのタイトルに表示されます。時刻が更新されるかどうかを確認するには、1 分ほど待ちます。
すべて正常に動作する場合は、スタートアップ アプリケーションに追加します。Dash > スタートアップ アプリケーション > 追加で、次のコマンドを追加します。
python3 /path/to/show_datetime.py
起動から実行するのが困難な場合は、次のコマンドを使用します (起動アプリケーション内)。
/bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
説明
スクリプトは次の 3 つの点に注目します。
- 最前面のウィンドウのid
- 最前面のウィンドウの名前
- 現在時間(分)
どちらかに変更があった場合、日付/時刻が現在最前面のウィンドウに追加または更新されます。
ウィンドウの名前と ID を使用するのはなぜですか?
- 窓-id間違ったウィンドウが設定されないように、ウィンドウのタイトルを設定するために使用されます (たとえば、ターミナル ウィンドウは同様の名前を付けることができます)。
- 窓-名前タブ付きウィンドウを含めることです
Firefox
。例えば、ウィンドウ名前別のタブを選択または開くとウィンドウが変わりますが、id変わりません。 - の条件付き
if any([])
理由がある場合にのみウィンドウのタイトルを編集します。
答え2
これは単純なシェル スクリプトです。
要件
xdotool
sudo apt-get install xdotool
wmctrl
sudo apt-get install wmctrl
主要部分
wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"
は||
ウィンドウタイトルと日付/時刻部分の間の区切りです。別の区切りが必要な場合は、次のように変更します。
#
wmctrl -r :ACTIVE: -N "$(awk -F' #' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) # $(date "+%Y-%m-%d %H:%M:%S")"
スクリプト
#!/bin/bash
while true
do
wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"
sleep 5
done
答え3
これは、bash、xprop、wmctrl (ubuntu には付属していません) を利用するスクリプトです。このスクリプトは、自動起動エントリとして追加するか、.desktop
ファイルに配置できます。基本的な考え方は、現在アクティブなウィンドウの ID を取得し、現在のタイトルを保存し、date コマンドの出力とタイトルを使用して新しいタイトルを作成することです。if ステートメントは、日付を追加する無限ループを防止します。 で取得できますwmctrl
。sudo apt-get install wmctrl
それ以外は、このスクリプトは非常に単純ですが、十分に機能します。
#!/bin/bash
# Date : June 9 2015
# Author: Serg Kolo
# Description: script to append time to window titles
while sleep 1; do
ACTIVEID=$(xprop -root | awk '/^_NET_ACTIVE_WINDOW/ {gsub("0x","0x0");print $5}')
MATCHED_TITLE="$( wmctrl -l | awk -v searchterm=$ACTIVEID '$0~searchterm {for(i=4;i<=NF;i++) printf $i" "}')"
date --date="$(echo $MATCHED_TITLE | awk '{print $1" "$2}')" > /dev/null 2>&1
if [ "$?" -eq 0 ]; then
MATCHED_TITLE="$(echo $MATCHED_TITLE | awk '{for(i=3;i<=NF;i++) printf $i" "}')"
fi
sleep 1
wmctrl -i -r $ACTIVEID -T "$(date +"%D %H:%M" 2>/dev/null) $MATCHED_TITLE "
done