summaryrefslogtreecommitdiffstats
path: root/lass
diff options
context:
space:
mode:
authorlassulus <git@lassul.us>2023-09-03 12:34:55 +0200
committerlassulus <git@lassul.us>2023-09-03 12:34:55 +0200
commit2c0e580ba1c1cd28a135639bd8e17df14399db5c (patch)
treeefa1c35ae6f9acb847b04ca0eb1e3d3da4cd22c8 /lass
parent93289a9d3197c7e0d30d0cda96ab6e9f59dd1f36 (diff)
l super-vnc: init
Diffstat (limited to 'lass')
-rw-r--r--lass/5pkgs/super-vnc/default.nix38
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
+''