Zenity

讓 Zenity 對話框始終在前台顯示

  • June 12, 2019

有沒有辦法檢測到Zenity對話失去焦點?

我想將對話框保持在前台,除非使用者按下ESC.

我正在嘗試將其添加到此腳本中:

#!/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
#!/bin/bash
# This will wait one second and then steal focus and make the Zenity dialog box always-on-top (aka. 'above').

(sleep 1 && wmctrl -F -a "I am on top" -b add,above) &
(zenity --info --title="I am on top" --text="How to help Zenity to get focus and be always on top")

來源:

如果您將其作為 cron 作業執行,您可能會遇到問題。Cron 的環境不知道您的 X 顯示器、dbus 或桌面,並且不會顯示 zenity 框或將其保持在頂部。wmctrl 和 zenity之前添加 DISPLAY=:0可以解決問題:

(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")

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