Gibt es eine Möglichkeit zu erkennen, dass ein Zenity
Dialog den Fokus verloren hat?
Ich möchte das Dialogfeld im Vordergrund halten, es sei denn, der Benutzer drückt ESC.
Ich versuche, es diesem Skript hinzuzufügen :
#!/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
Antworten:
Quelle:
quelle
add,fullscreen
es auch funktionieren wird(while ! wmctrl -F -a "$$ the title" -b add,above;do sleep 1;done) &
und setze die Skript-PID auf den Titel, um sie einzigartiger zu machen.Sie können auf Probleme stoßen, wenn Sie dies als Cron-Job ausführen. Die Umgebung von Cron kennt Ihr X-Display, Ihren dbus oder Ihren Desktop nicht und zeigt die Zenity-Box nicht an oder behält sie oben. Hinzufügen DISPLAY =: 0 vor sowohl wmctrl und zenity behebt das Problem:
(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")
quelle
Diese Lösung ist größtenteils die gleiche wie die von @Jan, verwendet jedoch die PID anstelle des Fenstertitels, um das Fenster zu identifizieren, und ist außerdem Bourne Shell-kompatibel (-> erfordert keine Bash).
quelle