forked from Shinonome/dots-hyprland
Improve virtmon
This commit is contained in:
@@ -11,51 +11,6 @@ function vianix-warning(){
|
|||||||
printf "${STY_RST}"
|
printf "${STY_RST}"
|
||||||
pause
|
pause
|
||||||
}
|
}
|
||||||
function install_cmds(){
|
|
||||||
case $OS_GROUP_ID in
|
|
||||||
"arch")
|
|
||||||
local pkgs=()
|
|
||||||
for cmd in "$@";do
|
|
||||||
# For package name which is not cmd name, use "case" syntax to replace
|
|
||||||
pkgs+=($cmd)
|
|
||||||
done
|
|
||||||
x sudo pacman -Syu
|
|
||||||
x sudo pacman -S --noconfirm --needed "${pkgs[@]}"
|
|
||||||
;;
|
|
||||||
"debian")
|
|
||||||
local pkgs=()
|
|
||||||
for cmd in "$@";do
|
|
||||||
# For package name which is not cmd name, use "case" syntax to replace
|
|
||||||
pkgs+=($cmd)
|
|
||||||
done
|
|
||||||
x sudo apt update -y
|
|
||||||
x sudo apt install -y "${pkgs[@]}"
|
|
||||||
;;
|
|
||||||
"fedora")
|
|
||||||
local pkgs=()
|
|
||||||
for cmd in "$@";do
|
|
||||||
# For package name which is not cmd name, use "case" syntax to replace
|
|
||||||
pkgs+=($cmd)
|
|
||||||
done
|
|
||||||
x sudo dnf install -y "${pkgs[@]}"
|
|
||||||
;;
|
|
||||||
"suse")
|
|
||||||
local pkgs=()
|
|
||||||
for cmd in "$@";do
|
|
||||||
# For package name which is not cmd name, use "case" syntax to replace
|
|
||||||
pkgs+=($cmd)
|
|
||||||
done
|
|
||||||
x sudo zypper refresh
|
|
||||||
x sudo zypper -n install "${pkgs[@]}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
printf "WARNING\n"
|
|
||||||
printf "No method found to install package providing the commands:\n"
|
|
||||||
printf " $@\n"
|
|
||||||
printf "Please install by yourself.\n"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
function install_nix(){
|
function install_nix(){
|
||||||
# https://github.com/NixOS/experimental-nix-installer
|
# https://github.com/NixOS/experimental-nix-installer
|
||||||
local cmd=nix
|
local cmd=nix
|
||||||
@@ -110,18 +65,8 @@ function hm_deps(){
|
|||||||
|
|
||||||
vianix-warning
|
vianix-warning
|
||||||
|
|
||||||
NOT_FOUND_CMDS=()
|
|
||||||
TEST_CMDS=(curl fish swaylock gnome-keyring)
|
TEST_CMDS=(curl fish swaylock gnome-keyring)
|
||||||
for cmd in "${TEST_CMDS[@]}"; do
|
ensure_cmds "${TEST_CMDS[@]}"
|
||||||
if ! command -v $cmd >/dev/null 2>&1;then
|
|
||||||
NOT_FOUND_CMDS+=($cmd)
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [[ ${#NOT_FOUND_CMDS[@]} -gt 0 ]]; then
|
|
||||||
echo -e "${STY_YELLOW}[$0]: Not found: ${NOT_FOUND_CMDS[*]}.${STY_RST}"
|
|
||||||
showfun install_cmds
|
|
||||||
v install_cmds "${NOT_FOUND_CMDS[@]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v nix >/dev/null 2>&1;then
|
if ! command -v nix >/dev/null 2>&1;then
|
||||||
echo -e "${STY_YELLOW}[$0]: \"nix\" not found.${STY_RST}"
|
echo -e "${STY_YELLOW}[$0]: \"nix\" not found.${STY_RST}"
|
||||||
|
|||||||
@@ -344,3 +344,60 @@ function backup_clashing_targets(){
|
|||||||
x mkdir -p $backup_dir
|
x mkdir -p $backup_dir
|
||||||
x rsync -av --progress "${args_includes[@]}" "$target_dir/" "$backup_dir/"
|
x rsync -av --progress "${args_includes[@]}" "$target_dir/" "$backup_dir/"
|
||||||
}
|
}
|
||||||
|
function install_cmds(){
|
||||||
|
case $OS_GROUP_ID in
|
||||||
|
"arch")
|
||||||
|
local pkgs=()
|
||||||
|
for cmd in "$@";do
|
||||||
|
# For package name which is not cmd name, use "case" syntax to replace
|
||||||
|
pkgs+=($cmd)
|
||||||
|
done
|
||||||
|
v sudo pacman -Syu
|
||||||
|
v sudo pacman -S --noconfirm --needed "${pkgs[@]}"
|
||||||
|
;;
|
||||||
|
"debian")
|
||||||
|
local pkgs=()
|
||||||
|
for cmd in "$@";do
|
||||||
|
# For package name which is not cmd name, use "case" syntax to replace
|
||||||
|
pkgs+=($cmd)
|
||||||
|
done
|
||||||
|
v sudo apt update -y
|
||||||
|
v sudo apt install -y "${pkgs[@]}"
|
||||||
|
;;
|
||||||
|
"fedora")
|
||||||
|
local pkgs=()
|
||||||
|
for cmd in "$@";do
|
||||||
|
# For package name which is not cmd name, use "case" syntax to replace
|
||||||
|
pkgs+=($cmd)
|
||||||
|
done
|
||||||
|
v sudo dnf install -y "${pkgs[@]}"
|
||||||
|
;;
|
||||||
|
"suse")
|
||||||
|
local pkgs=()
|
||||||
|
for cmd in "$@";do
|
||||||
|
# For package name which is not cmd name, use "case" syntax to replace
|
||||||
|
pkgs+=($cmd)
|
||||||
|
done
|
||||||
|
v sudo zypper refresh
|
||||||
|
v sudo zypper -n install "${pkgs[@]}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "WARNING\n"
|
||||||
|
printf "No method found to install package providing the commands:\n"
|
||||||
|
printf " $@\n"
|
||||||
|
printf "Please install by yourself.\n"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
function ensure_cmds(){
|
||||||
|
local not_found_cmds=()
|
||||||
|
for cmd in "$@"; do
|
||||||
|
if ! command -v $cmd >/dev/null 2>&1;then
|
||||||
|
not_found_cmds+=($cmd)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ ${#not_found_cmds[@]} -gt 0 ]]; then
|
||||||
|
echo -e "${STY_YELLOW}[$0]: Not found: ${not_found_cmds[*]}.${STY_RST}"
|
||||||
|
install_cmds "${not_found_cmds[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,6 +5,15 @@
|
|||||||
|
|
||||||
readarray -t vmons < <(hyprctl -j monitors all | jq -r '.[] | select(.name | test("^HEADLESS-")) | .name')
|
readarray -t vmons < <(hyprctl -j monitors all | jq -r '.[] | select(.name | test("^HEADLESS-")) | .name')
|
||||||
|
|
||||||
|
ensure_cmds wayvnc lsof jq
|
||||||
|
|
||||||
|
if [[ "${CLEAN_VIRTUAL_MONITORS}" = true ]]; then
|
||||||
|
echo "Cleaning virtual monitors..."
|
||||||
|
for i in "${vmons[@]}"; do
|
||||||
|
x hyprctl output remove "$i"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
if [ "${#vmons[@]}" -gt 0 ]; then
|
if [ "${#vmons[@]}" -gt 0 ]; then
|
||||||
echo "headless monitors found:"
|
echo "headless monitors found:"
|
||||||
printf '%s\n' "${vmons[@]}"
|
printf '%s\n' "${vmons[@]}"
|
||||||
@@ -18,7 +27,7 @@ else
|
|||||||
echo "No headless monitors found."
|
echo "No headless monitors found."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Creating headless monitor..."
|
echo "Creating tester monitor..."
|
||||||
readarray -t vmons_old < <(hyprctl -j monitors all | jq -r '.[] | select(.name | test("^HEADLESS-")) | .name')
|
readarray -t vmons_old < <(hyprctl -j monitors all | jq -r '.[] | select(.name | test("^HEADLESS-")) | .name')
|
||||||
x hyprctl output create headless
|
x hyprctl output create headless
|
||||||
readarray -t vmons_new < <(hyprctl -j monitors all | jq -r '.[] | select(.name | test("^HEADLESS-")) | .name')
|
readarray -t vmons_new < <(hyprctl -j monitors all | jq -r '.[] | select(.name | test("^HEADLESS-")) | .name')
|
||||||
@@ -34,12 +43,12 @@ for e in "${vmons_new[@]}"; do
|
|||||||
done
|
done
|
||||||
if (( ${#deltas[@]} == 1 )); then
|
if (( ${#deltas[@]} == 1 )); then
|
||||||
vmon_tester="${deltas[0]}"
|
vmon_tester="${deltas[0]}"
|
||||||
echo "New virtual monitor found: $vmons_tester"
|
echo "tester monitor found: $vmons_tester"
|
||||||
elif (( ${#deltas[@]} == 0 )); then
|
elif (( ${#deltas[@]} == 0 )); then
|
||||||
echo "Error: No new virtual monitor found"
|
echo "Error: No tester monitor found"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
echo "Error: multiple new virtual monitor found: ${deltas[*]}"
|
echo "Error: multiple tester monitor found: ${deltas[*]}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
#echo "Setting geometry..."
|
#echo "Setting geometry..."
|
||||||
@@ -52,10 +61,11 @@ for port in {5900..5999}; do
|
|||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
# TODO: Allow running in background and implement --stop to stop it
|
||||||
if [ -z "$vnc_port" ];then
|
if [ -z "$vnc_port" ];then
|
||||||
echo "No available port for vnc server, aborting..."; exit 1
|
echo "No available port for vnc server, aborting..."; exit 1
|
||||||
fi
|
fi
|
||||||
wayvnc -S -o=${vmon_tester} --log-level=trace 0.0.0.0 $vnc_port
|
wayvnc -S -o=${vmon_tester} --log-level=trace 0.0.0.0 $vnc_port
|
||||||
|
|
||||||
echo "Cleaning the new headless monitor..."
|
echo "Cleaning the tester monitor..."
|
||||||
x hyprctl output remove "${vmon_tester}"
|
hyprctl output remove "${vmon_tester}"
|
||||||
|
|||||||
@@ -8,13 +8,14 @@ Create virtual monitor for testing multi-monitors.
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
-h, --help Show this help message
|
-h, --help Show this help message
|
||||||
|
-c, --clean Clean all virtual monitors and exit
|
||||||
-k, --keep Do not remove virtual monitors
|
-k, --keep Do not remove virtual monitors
|
||||||
"
|
"
|
||||||
}
|
}
|
||||||
# `man getopt` to see more
|
# `man getopt` to see more
|
||||||
para=$(getopt \
|
para=$(getopt \
|
||||||
-o hk \
|
-o hck \
|
||||||
-l help,keep \
|
-l help,clean,keep \
|
||||||
-n "$0" -- "$@")
|
-n "$0" -- "$@")
|
||||||
[ $? != 0 ] && echo "$0: Error when getopt, please recheck parameters." && exit 1
|
[ $? != 0 ] && echo "$0: Error when getopt, please recheck parameters." && exit 1
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
@@ -30,14 +31,9 @@ done
|
|||||||
eval set -- "$para"
|
eval set -- "$para"
|
||||||
while true ; do
|
while true ; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
-c|--clean) CLEAN_VIRTUAL_MONITORS=true;shift;;
|
||||||
-k|--keep) KEEP_VIRTUAL_MONITORS=true;shift;;
|
-k|--keep) KEEP_VIRTUAL_MONITORS=true;shift;;
|
||||||
--) shift;break ;;
|
--) shift;break ;;
|
||||||
*) sleep 0 ;;
|
*) sleep 0 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
#if [[ -f "$1" ]]; then
|
|
||||||
# echo "Using list file \"$1\".";LIST_FILE_PATH="$1";shift 1
|
|
||||||
#else
|
|
||||||
# echo "Wrong path \"$1\" of list file.";exit 1
|
|
||||||
#fi
|
|
||||||
|
|||||||
Reference in New Issue
Block a user