diff options
author | lassulus <git@lassul.us> | 2023-09-03 12:34:55 +0200 |
---|---|---|
committer | lassulus <git@lassul.us> | 2023-09-03 12:34:55 +0200 |
commit | 2c0e580ba1c1cd28a135639bd8e17df14399db5c (patch) | |
tree | efa1c35ae6f9acb847b04ca0eb1e3d3da4cd22c8 | |
parent | 93289a9d3197c7e0d30d0cda96ab6e9f59dd1f36 (diff) |
l super-vnc: init
-rw-r--r-- | lass/5pkgs/super-vnc/default.nix | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lass/5pkgs/super-vnc/default.nix b/lass/5pkgs/super-vnc/default.nix new file mode 100644 index 000000000..ce0e3aaa7 --- /dev/null +++ b/lass/5pkgs/super-vnc/default.nix @@ -0,0 +1,38 @@ +{ pkgs, lib }: let + + quoteChar = c: + if c == "\n" then "'\n'" + else c; + quote = x: if x == "" then "''" else lib.stringAsChars quoteChar x; + +in pkgs.writers.writeDashBin "super-vnc" '' + PATH=${lib.makeBinPath (with pkgs; [ + xorg.xrandr gnugrep coreutils xorg.xorgserver gnused openssh gawk tightvnc + ])} + remote=$1 + res_x=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1) + res_y=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2) + export modeline="$(gtf "$res_x" "$res_y" 60 | sed -n 's/.*Modeline "\([^" ]\+\)" \(.*\)/\1 \2/p')" + export name="$(echo "$modeline" | sed 's/\([^ ]\+\) .*/\1/')" + export vncline="''${res_x}x''${res_y}+0+0" + + if [ -z "$modeline" -o -z "$name" ]; then + echo "Error! modeline=$modeline name=$name" + exit 1 + fi + + echo $modeline + + # TODO user random highport + ssh "$remote" -L 5900:localhost:55900 bash <<EOF +set -x +export DISPLAY=:0 +export output=\$(xrandr | grep disconnected | tail -1 | cut -d' ' -f1) +xrandr --newmode $modeline +xrandr --verbose --addmode "\$output" "$name" +xrandr --output "\$output" --off +xrandr --verbose --output "\$output" --mode "$name" --right-of "\$(xrandr | grep primary | cut -d ' ' -f1)" +EOF + sleep 2 + vncviewer localhost:55900 +'' |