J'utilise la minuterie xfce4 et je veux que l'alarme fasse clignoter l'écran en plus de l'alarme contextuelle. Currenly j'utilise
xset dpms force off; sleep 3; xset dpms force on
ce qui laisse l'écran s'éteindre à nouveau mais j'aimerais qu'il clignote avec des couleurs et plus rapidement si possible dans un style clignotant
Salutations
J'ai fait un script bash pour atteindre l'objectif:
flash-primary-screen.sh
script bashCopiez ce script bash sur votre ordinateur:
#!/bin/bash
# NAME: flash-primary-screen.sh
# PATH: ~/bin
# DESC: Flashes primary screen colours to alert timer has ended.
# DATE: November 15, 2018
# NOTE: Written for: https://askubuntu.com/a/1092835/307523
# I'm looking for a command to flash screens (if possible in colors)
# Change 6 variables below to control screen flashing levels
MaxBright="1.5"
MinBright=".5"
MaxRed="2.0"
MaxGreen="2.0"
MaxBlue="2.0"
MinGamma=".5"
declare aXrandr=()
# Next two functions lifted from: eyesome internet sunrise/sunset time screen
# brightness and gamma controller: https://github.com/WinEunuuchs2Unix/eyesome
InitXrandrArray () {
# Array is used for each monitor and searched by name.
# Save time to search on connected/disconnected, primary monitor,
# brightness level, gamma level.
mapfile -t aXrandr < <(xrandr --verbose --current)
} # InitXrandrArray
SearchXrandrArray () {
# Parms: $MonXrandrName = xrandr monitor name to search for.
# NOTE: Entries in array follow predicatble order from xrandr --verbose:
# <MONITOR-NAME> connected / disconnected (line 1 of monitor entry)
# Gamma: 0.99:0.99:0.99 (line 5 of entry)
# Brightness: 0.99 (line 6 of entry)
# CRTC: 9 (line 8 of entry)
fNameFnd=false
fBrightnessFnd=false
fGammaFnd=false
fCrtcFnd=false
XrandrConnection=disconnected
XrandrPrimary=false
XrandrGamma=""
XrandrBrightness=""
XrandrCRTC="" # Laptop lid open value=0, lid closed=blank
for (( i=0; i<"${#aXrandr[*]}"; i++ )) ; do
line="${aXrandr[$i]}"
# Have we looped to next monitor and not found search string?
if [[ "$line" =~ " connected " ]] && [[ $fNameFnd == true ]] ; then
break
fi
if [[ "$line" =~ ^"$MonXrandrName connected" ]]; then
fNameFnd=true
XrandrConnection=connected
[[ "$line" =~ "primary" ]] && XrandrPrimary=true
fi
if [[ $fNameFnd == true ]] && [[ $fGammaFnd == false ]] ; then
if [[ "$line" =~ "Gamma: " ]]; then
fGammaFnd=true
XrandrGamma="${line##* }"
# TODO: Use `xgamma` for accuracy
fi
fi
if [[ $fGammaFnd == true ]] && [[ $fBrightnessFnd == false ]] ; then
if [[ "$line" =~ "Brightness: " ]]; then
fBrightnessFnd=true
XrandrBrightness="${line##* }"
fi
fi
if [[ $fBrightnessFnd == true ]] && [[ $fCrtcFnd == false ]] ; then
if [[ "$line" =~ "CRTC: " ]]; then
fCrtcFnd=true
XrandrCRTC="${line##* }"
break
fi
fi
done
} # SearchXrandrArray
FlipBright () {
if [[ $NewBrightness == "$MaxBright" ]] ; then
NewBrightness="$MinBright"
else
NewBrightness="$MaxBright"
fi
} # FlipBright
CleanUp() {
xrandr --output "$MonXrandrName" --gamma "$SaveGamma" \
--brightness "$SaveBrightness"
# Compensate for bug in Xrandr as of Nov 15, 2018 with second call
InitXrandrArray
SearchXrandrArray
xrandr --output "$MonXrandrName" --gamma "$XrandrGamma"
exit 0
} # CleanUp
Main () {
trap CleanUp INT TERM
# Get primary monitor current settings
XrandrName=$(xrandr --current | grep primary)
MonXrandrName="${XrandrName%% *}"
InitXrandrArray
SearchXrandrArray
# Did we find primary monitor ok?
if [[ $fBrightnessFnd == false ]] || [[ $fGammaFnd == false ]] ; then
echo "Internal Error: Could not find Primary Screen brightness or gamma"
echo XrandrPrimary: "$XrandrPrimary"
echo aXrandr[0]: "${aXrandr[0]}"
echo Brightness: "$XrandrBrightness"
echo Gamma: "$XrandrGamma"
exit 2
fi
# Restore these values when CleanUping program
SaveBrightness="$XrandrBrightness"
SaveGamma="$XrandrGamma"
# Wait for <Ctrl>+C or until parent kills us.
while true ; do
if [[ $Red == true ]] ; then
Red=false
Green=true
NewGamma="$MaxRed:$MinGamma:$MinGamma"
FlipBright
Elif [[ $Green == true ]] ; then
Green=false
NewGamma="$MinGamma:$MaxGreen:$MinGamma"
FlipBright
else
Red=true
NewGamma="$MinGamma:$MinGamma:$MaxBlue"
FlipBright
fi
xrandr --output "$MonXrandrName" --gamma "$NewGamma" \
--brightness "$NewBrightness"
sleep .2
done
} # Main
Main "$@"
Marquez le script comme exécutable en utilisant:
chmod a+x /path/flash-primary-screen.sh
Où /path
est le répertoire dans lequel vous avez placé le script.
Appelez le script depuis votre programme (ou même la ligne de commande). Pour terminer le script, appuyez sur Ctrl+C.
Modifiez les 6 premières variables définies pour manipuler les changements de niveau de luminosité et de niveau de couleur.
N'hésitez pas à poser des questions ou à poster des suggestions dans la section des commentaires ci-dessous!
Vous pouvez également faire clignoter les couleurs ASCII Texte artistique dans le terminal:
Voici le script:
#!/bin/bash
From: http://wiki.bash-hackers.org/scripting/terminalcodes
DATA[0]=" _/ _/ _/ _/ "
DATA[1]=" _/_/_/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ "
DATA[2]=" _/ _/ _/ _/ _/ _/ _/_/ _/ _/"
DATA[3]="_/_/_/_/_/ _/ _/ _/ _/ _/_/ _/ _/ "
DATA[4]=" _/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/ "
# virtual coordinate system is X*Y ${#DATA} * 5
REAL_OFFSET_X=0
REAL_OFFSET_Y=0
draw_char() {
V_COORD_X=$1
V_COORD_Y=$2
tput cup $((REAL_OFFSET_Y + V_COORD_Y)) $((REAL_OFFSET_X + V_COORD_X))
printf %c ${DATA[V_COORD_Y]:V_COORD_X:1}
}
trap 'exit 1' INT TERM
trap 'tput setaf 9; tput cvvis; clear' EXIT
tput civis
clear
while :; do
for ((c=1; c <= 7; c++)); do
tput setaf $c
for ((x=0; x<${#DATA[0]}; x++)); do
for ((y=0; y<=4; y++)); do
draw_char $x $y
done
done
done
done
Pour générer le ASCII Art vous pouvez utiliser Figlet ou Toilet. Voir: Lorsque le terminal est ouvert, puis-je afficher le calendrier et l'heure actuels?