Apakah ada cara untuk mendeteksi bahwa Zenity
dialog telah kehilangan fokus?
Saya ingin menyimpan kotak dialog di latar depan kecuali pengguna menekan ESC.
Saya mencoba menambahkannya ke skrip ini :
#!/bin/bash
# requires these packages from ubuntu repository:
# wmctrl, zenity, x11-utils
# and the script mouse-speed
# This procect on git: https://github.com/rubo77/mouse-speed
######## configuration ##########
# seconds between micro breaks
microbreak_time=$(( 10 * 60 ))
# micro break duration in seconds
microbreak_duration=15
# seconds between long breaks
longbreak_time=$(( 120 * 60 ))
# message to display
message="Try focussing a far object outside the window with the eye to relax!"
longbreak_message="Change your seating or continue work in a standing/sitting position"
#postpone label
postpone="Postpone"
window_title="typebreak"
# global zoom of your window manager:
ZOOM=2
# height in px of the top system-bar:
TOPMARGIN=57
# sum in px of all horizontal borders:
HORIZONTALMARGIN=40
# get width of screen and height of screen
SCREEN_WIDTH=$(xwininfo -root | awk '$1=="Width:" {print $2}')
SCREEN_HEIGHT=$(xwininfo -root | awk '$1=="Height:" {print $2}')
# width and height
W=$(( $SCREEN_WIDTH / $ZOOM - 2 * $HORIZONTALMARGIN ))
H=$(( $SCREEN_HEIGHT / $ZOOM - 2 * $TOPMARGIN ))
function slow_down(){
#zenity --warning --text "slow down mouse";
mouse-speed -d 30
}
while true; do
# short loop every few minutes to look around
sleep $microbreak_time
(
echo "99"
sleep $(( $microbreak_duration - 2 ))
echo "# Mouse speed reset to 100%"
sleep 2
echo "100"
) | if ( sleep 1 && wmctrl -F -a "$window_title" -b add,maximized_vert,maximized_horz && sleep 3 && wmctrl -F -a "$window_title" -b add,above ) & ( zenity --progress --text "$message" --percentage=0 --auto-close --height=$H --width=$W --pulsate --title="$window_title" --cancel-label="$postpone" ); then
#zenity --info --text "Maus normal speed!"
mouse-speed -r
else
slow_down
fi
done &
while true; do
# second long loop to change seat position
sleep $longbreak_time
zenity --warning --text "$longbreak_message" --title="$window_title - long break"
done
Jawaban:
Sumber:
sumber
add,fullscreen
juga akan berfungsi(while ! wmctrl -F -a "$$ the title" -b add,above;do sleep 1;done) &
dan juga letakkan skrip pid pada judul untuk membuatnya lebih unik.Anda dapat mengalami masalah jika Anda menjalankan ini sebagai tugas cron. Lingkungan Cron tidak mengetahui tampilan X, dbus, atau desktop Anda dan tidak akan menampilkan kotak zenity atau menyimpannya di atas. Menambahkan DISPLAY =: 0 sebelum kedua wmctrl dan zenity menyelesaikan masalah:
(sleep 1 && DISPLAY=:0 wmctrl -F -a "I am on top" -b add,above) & (DISPLAY=:0 zenity --info --title="I am on top" --text="How to help Zenity to get focus and be always on top")
sumber
Solusi ini sebagian besar sama dengan yang dilakukan oleh @Jan, tetapi menggunakan PID alih-alih judul jendela untuk mengidentifikasi jendela, dan juga kompatibel dengan Bourne Shell (-> tidak memerlukan bash).
sumber