Ajout du script qui permet de créer et détruire un écran virtuel secondaire
This commit is contained in:
parent
f0756d4d4c
commit
a09cd44ec5
1 changed files with 121 additions and 0 deletions
121
bin/secondscreenctl
Executable file
121
bin/secondscreenctl
Executable file
|
@ -0,0 +1,121 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
colored_star_message() {
|
||||||
|
local color="$1"
|
||||||
|
shift
|
||||||
|
printf '\033[1;'"${color}"'m*\033[0m \033[1m%s\033[0m\n' "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
ko() {
|
||||||
|
>&2 colored_star_message 31 "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
ok() {
|
||||||
|
colored_star_message 32 "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_vscreen_name() {
|
||||||
|
hyprctl monitors | awk '($1 == "Monitor") { print $2 }' | grep '^HEADLESS-[0-9]*$'
|
||||||
|
}
|
||||||
|
|
||||||
|
vscreen_exists() {
|
||||||
|
[ -n "$(get_vscreen_name)" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
vnc_running() {
|
||||||
|
wayvncctl output-list > /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
get_mainmon_refrate() {
|
||||||
|
hyprctl monitors | grep -A 1 '^Monitor .* (ID 0):$' | sed 1d | xargs | sed 's/^.*@//g' | cut -d ' ' -f 1
|
||||||
|
}
|
||||||
|
|
||||||
|
create() {
|
||||||
|
# si il n'y a pas déjà d'écran
|
||||||
|
# créer un écran virtuel
|
||||||
|
# configurer l'écran
|
||||||
|
# donner le nom de l'écran
|
||||||
|
# si il n'y a pas de serveur VNC
|
||||||
|
# screener un serveur VNC
|
||||||
|
|
||||||
|
local \
|
||||||
|
vscreen_name \
|
||||||
|
resolution=1920x1080 \
|
||||||
|
position=0x0 \
|
||||||
|
listen_address=0.0.0.0
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! vscreen_exists; then
|
||||||
|
hyprctl output create headless
|
||||||
|
vscreen_name="$(get_vscreen_name)"
|
||||||
|
printf '%s \033[1m%s\033[0m\n' "New virtual screen:" "$vscreen_name" &
|
||||||
|
hyprctl keyword monitor \
|
||||||
|
"${vscreen_name}," \
|
||||||
|
"${resolution}@$(get_mainmon_refrate)," \
|
||||||
|
"${position}," \
|
||||||
|
1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! vnc_running; then
|
||||||
|
screen -d -m wayvnc -o "$vscreen_name" 0.0.0.0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy() {
|
||||||
|
# si il y a un serveur VNC
|
||||||
|
# tuer le serveur VNC
|
||||||
|
# si il y a un écran virtuel
|
||||||
|
# supprimer l'écran virtuel
|
||||||
|
|
||||||
|
if vnc_running; then
|
||||||
|
wayvncctl wayvnc-exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if vscreen_exists; then
|
||||||
|
hyprctl output remove "$(get_vscreen_name)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
status() {
|
||||||
|
# si il y a un serveur VNC
|
||||||
|
# afficher que le serveur VNC est en cours
|
||||||
|
# si il y a un écran virtuel
|
||||||
|
# afficher le nom de l'écran virtuel
|
||||||
|
local exit_status=0
|
||||||
|
|
||||||
|
if vnc_running; then
|
||||||
|
ok "The VNC server is running."
|
||||||
|
else
|
||||||
|
ko "The VNC server is not running."
|
||||||
|
exit_status="$(("$exit_status" + 1))"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if vscreen_exists; then
|
||||||
|
ok "Monitor name: $(get_vscreen_name)"
|
||||||
|
else
|
||||||
|
ko "The virtual monitor does not exist!"
|
||||||
|
exit_status="$(("$exit_status" + 1))"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit "$exit_status"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
verb="$1"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$verb" in
|
||||||
|
create|destroy|status)
|
||||||
|
"$verb"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
status
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ko "skill issue"
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
Loading…
Reference in a new issue