Skip to content
Snippets Groups Projects
Commit 5991c334 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Skripte

parent 144a5334
Branches
No related tags found
No related merge requests found
VNC without SSH tunnel, 14.07.2020, 12:42:42
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To start a listening VNC client for VNC channel $x,
open port 550$x and run the command:
DISPLAY=:$x ssvncviewer -listen &
CVH-Bot, 14.07.2020, 12:42:51
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To install CVH-Bot,
- install the Go language,
- create a directory $HOME/go/src,
- "git clone" the sources from https://gitlab.cvh-server.de/jvongehr/cvh-bot.git
to that directory,
- use "go get <...>", for instance
go get -v layeh.com/gopus
to install the required libraries,
- use "go build" to compile it.
After that, use "./mumbleBot" to run it.
Connecting Jitsi Meet to Mumble, 14.07.2020, 12:44:07
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To connect the sound of Jitsi Meet connected to VNC channel $x
to a Mumble channel,
- create ALSA loopback devices: modprobe -v snd-aloop,
- start the Jitsi Meet cliend used by autojits,
configure it to use the ALSA loopback device hw:0,0 for input and output
and close it again,
- manually start a Mumble client in the VNC display
DISPLAY=$x mumble
and configure it to to use the ALSA loopback device hw:0,1 for input and output,
make the audio input continuous (rather than push-to-talk etc.), then let it run.
After that, this Mumble client will relay the audio stream of a Jitsi Meet session
to Mumble, just like VNC is relaying its video stream to noVNC.
#!/bin/bash
url="https://jitsi.cvh-server.de"
room="vnc$1"
x="$1"
y="$(($1 + 6))"
browser="/usr/bin/chromium"
user_data_dir="/home/pgerwinski/chromium$1"
jitsi_width=1280
jitsi_height=720
jitsi_x=0
jitsi_y=0
jitsi_resolution="$jitsi_width"x"$jitsi_height"
time=0
lastrun=0
counter=0
bots=0
bot_pid=0
if [ "$x" = "6" ]; then
enable_experimental_features=true
vncviewer="ssvncviewer"
browser="/home/pgerwinski/jitsi-meet-x86_64.AppImage"
user_data_dir="/home/pgerwinski/jitsi$1"
jitsi_max_width="$jitsi_width"
jitsi_max_height="$jitsi_height"
else
enable_experimental_features=false
fi
switch_to_resolution ()
{
x="$1"
y="$2"
resolution="$3"
width=$(echo $resolution | cut -d x -f 1)
height=$(echo $resolution | cut -d x -f 2)
half_width=$((width / 2))
half_height=$((height / 2))
half_resolution="$half_width"x"$half_height"
echo "switch_to_resolution: $width"x"$height, $half_width"x"$half_height"
if DISPLAY=:"$x" xrandr | grep -q "$resolution"; then
echo "standard mode: $resolution"
else
timing=$(
gtf $width $height 60 \
| grep Modeline \
| (
read modeline name timing
echo $timing
)
)
echo DISPLAY=:$x xrandr --output VNC-0 --newmode "$resolution" $timing
DISPLAY=:$x xrandr --output VNC-0 --newmode "$resolution" $timing
DISPLAY=:$x xrandr --addmode VNC-0 "$resolution"
fi
DISPLAY=:"$x" xrandr --output VNC-0 --mode "$resolution" 2>&1
DISPLAY=:"$x" swarp 0 0
if DISPLAY=:"$y" xrandr | grep -q "$half_resolution"; then
echo "standard mode: $resolution"
else
timing=$(
gtf $half_width $half_height 60 \
| grep Modeline \
| (
read modeline name timing
echo $timing
)
)
echo DISPLAY=:$y xrandr --output VNC-0 --newmode "$half_resolution" $timing
DISPLAY=:$y xrandr --output VNC-0 --newmode "$half_resolution" $timing
DISPLAY=:$y xrandr --addmode VNC-0 "$half_resolution"
fi
DISPLAY=:"$y" xrandr --output VNC-0 --mode "$half_resolution" 2>&1
DISPLAY=:"$y" swarp 0 0
}
echo "$0 $* running ..."
while read line; do \
if echo "$line" | grep -q "^Jicofo .* Member $room@muc\.meet\.jitsi/[0-9a-f]* joined\.$"; then
echo "counter = $counter, bots = $bots; member joined ..."
counter=$((counter + 1))
if [ $((counter - bots)) -gt "0" ] && [ "$bot_pid" = "0" ]; then
echo "starting bot ..."
server_resolution=$(DISPLAY=:"$x" xrandr | grep '\*' | awk {'print $1'})
echo "server resolution: $server_resolution / $server_half_resolution"
if $enable_experimental_features; then
vnc_resolution=$(DISPLAY=:"$x" xwininfo -root -children \
| grep "$vncviewer" \
| grep -o " [0-9x+-]* * [0-9+-]* *$" \
| sed -e 's/^ *//' -e 's/+.*$//')
if [ -z "$vnc_resolution" ]; then
jitsi_width="$jitsi_max_width"
jitsi_height="$jitsi_max_height"
jitsi_x=0
jitsi_y=0
switch_to_resolution "$x" "$y" "$jitsi_resolution"
else
vnc_width=$(echo $vnc_resolution | cut -d "x" -f 1)
vnc_height=$(echo $vnc_resolution | cut -d "x" -f 2)
# jitsi_width=415
# jitsi_height=311
jitsi_width=512
jitsi_height=384
jitsi_x=$((vnc_width - jitsi_width))
jitsi_y=$((vnc_height - jitsi_height))
fi
echo HOME="$user_data_dir" URL="$url/$room" DISPLAY=:"$x" "$browser" --no-sandbox \&
HOME="$user_data_dir" URL="$url/$room" DISPLAY=:"$x" "$browser" --no-sandbox &
else
switch_to_resolution "$x" "$y" "$jitsi_resolution"
echo DISPLAY=:"$x" "$browser" --user-data-dir="$user_data_dir" --start-fullscreen "$url/$room" \&
DISPLAY=:"$x" "$browser" --user-data-dir="$user_data_dir" --start-fullscreen "$url/$room" &
fi
bot_pid="$!"
bots=$((bots + 1))
echo "... done: $bot_pid."
sleep 2s
for window_id in $(DISPLAY=:"$x" xwininfo -root -children \
| grep "Jitsi Meet" \
| cut -b 6-14); do
echo "adjusting bot window ..."
if $enable_experimental_features; then
# connect to Mumble
sleep 2s
echo "unmuting ..."
DISPLAY=:"$x" xdotool windowsize "$window_id" "$jitsi_max_width" "$jitsi_max_height"
DISPLAY=:"$x" xdotool windowmove "$window_id" 0 0
DISPLAY=:"$x" xdotool mousemove 1267 632
DISPLAY=:"$x" xdotool click 1
# DISPLAY=:"$x" xdotool mousemove 575 680
# DISPLAY=:"$x" xdotool click 1
fi
DISPLAY=":$x" xdotool windowsize "$window_id" "$jitsi_width" "$jitsi_height"
DISPLAY=":$x" xdotool windowmove "$window_id" "$jitsi_x" "$jitsi_y"
DISPLAY=:"$x" xdotool mousemove $((jitsi_x + jitsi_width)) $((jitsi_y + jitsi_height / 3))
echo "... done: $window_id."
done
fi
elif echo "$line" | grep -q "^Jicofo .* Member $room@muc.meet.jitsi/[0-9a-f]* is leaving$"; then
echo "counter = $counter, bots = $bots; member is leaving ..."
if [ "$counter" -gt "0" ]; then
counter=$((counter - 1))
fi
if [ "$bot_pid" = "0" ] && [ "$bots" -gt "0" ]; then
bots=$((bots - 1))
fi
if [ "$counter" -le "1" ] && [ "$bot_pid" -ne "0" ]; then
echo "killing bot $bot_pid ..."
kill "$bot_pid"
switch_to_resolution "$x" "$y" "$server_resolution"
bot_pid=0
bots=$((bots - 1))
echo "... done."
fi
fi
done
echo "Bye!"
#!/bin/bash
vncviewer="ssvncviewer"
vncopts="-autopass -viewonly -depth 24 -compresslevel 9 -quality 9 \
-geometry "
# -encodings raw,copyrect,tight,hextile,zlib,corre,rre
vncserver="tigervncserver"
vncserveropts="-depth 24" # add "-localhost no" to make it listen on all IPs
testfile="$HOME/vnc-testbild.pdf"
browser="chromium"
HOME="/home/pgerwinski"
max_resolution="1920x1080"
x="$1"
case "$x" in
[1-6])
true
;;
*)
echo "usage: $0 <channel>"
exit 1
;;
esac
y=$((x + 6))
z=$((x + 9500))
case "$x" in
1) tunnel_port=5913; password="hsSS2020";;
2) tunnel_port=5917; password="student" ;;
3) tunnel_port=5916; password="cvh2020" ;;
4) tunnel_port=5914; password="student" ;;
5) tunnel_port=5915; password="student" ;;
6) tunnel_port=5918; password="testcvh" ;;
esac
if [ "$x" = "6" ]; then
enable_experimental_features=true
jitsi_max_width=1280
jitsi_max_height=720
jitsi_min_width=512
jitsi_min_height=384
else
enable_experimental_features=false
fi
incoming_channel=$(echo "$tunnel_port" | cut -b 3-4)
echo "channel = $x, tunnel_port = $tunnel_port, incoming_channel = $incoming_channel"
switch_to_resolution ()
{
x="$1"
y="$2"
resolution="$3"
width=$(echo $resolution | cut -d x -f 1)
height=$(echo $resolution | cut -d x -f 2)
half_width=$((width / 2))
half_height=$((height / 2))
half_resolution="$half_width"x"$half_height"
echo "switch_to_resolution: $width"x"$height, $half_width"x"$half_height"
if DISPLAY=:"$x" xrandr | grep -q "$resolution"; then
echo "standard mode: $resolution"
else
timing=$(
gtf $width $height 60 \
| grep Modeline \
| (
read modeline name timing
echo $timing
)
)
echo DISPLAY=:$x xrandr --output VNC-0 --newmode "$resolution" $timing
DISPLAY=:$x xrandr --output VNC-0 --newmode "$resolution" $timing
DISPLAY=:$x xrandr --addmode VNC-0 "$resolution"
fi
DISPLAY=:"$x" xrandr --output VNC-0 --mode "$resolution" 2>&1
DISPLAY=:"$x" swarp 0 0
if DISPLAY=:"$y" xrandr | grep -q "$half_resolution"; then
echo "standard mode: $resolution"
else
timing=$(
gtf $half_width $half_height 60 \
| grep Modeline \
| (
read modeline name timing
echo $timing
)
)
echo DISPLAY=:$y xrandr --output VNC-0 --newmode "$half_resolution" $timing
DISPLAY=:$y xrandr --output VNC-0 --newmode "$half_resolution" $timing
DISPLAY=:$y xrandr --addmode VNC-0 "$half_resolution"
fi
DISPLAY=:"$y" xrandr --output VNC-0 --mode "$half_resolution" 2>&1
DISPLAY=:"$y" swarp 0 0
}
while true; do
just_started=false
if nc -z localhost "$tunnel_port"; then
process=$(ps aux \
| grep "$vncviewer.*:$incoming_channel" \
| grep -v "grep")
if [ -z "$process" ]; then
vnc_answer=$(echo sorry | timeout 5 nc localhost "$tunnel_port")
case "$vnc_answer" in
"RFB "*)
echo "starting vncviewer ..."
switch_to_resolution "$x" "$y" "$max_resolution"
channel_directory="$HOME/vnc$x"
(echo "$password" \
| DISPLAY=:"$x" HOME="$x_directory" \
"$vncviewer" :"$incoming_channel" -autopass $vncopts+0+0 2>&1) &
just_started=true
DISPLAY=:"$x" swarp 0 0
sleep 1
echo "... done."
;;
*)
echo -e "SSH tunnel open, VNC closed (answer = \"$vnc_answer\")."
;;
esac
fi
fi
Ssvnc=$(DISPLAY=:"$x" xwininfo -root -children | grep "Ssvnc")
ssvnc=$(DISPLAY=:"$x" xwininfo -root -children | grep "ssvnc")
if [ -n "$Ssvnc" ] && [ -z "$ssvnc" ]; then
echo "killing hanging ssvncviewers ..."
for id in $(DISPLAY=:"$x" xwininfo -root -children \
| grep "Ssvnc" \
| awk '{print $1}'); do
echo "window $id ..."
DISPLAY=:"$x" xkill -frame -id "$id"
done
just_started=false
sleep 1
echo "... done."
elif [ -n "$ssvnc" ]; then
if echo "$ssvnc" | grep -q "+0+0$"; then
true
else
echo "moving VNC viewer to top left"
windowid=$(echo "$ssvnc" | awk '{ print $1; }')
DISPLAY=:"$x" xdotool windowmove "$windowid" 0 0
fi
fi
server_resolution=$(DISPLAY=:"$x" xrandr | grep '\*' | awk '{print $1'})
vnc_resolution=$(DISPLAY=:"$x" xwininfo -root -children \
| grep "$vncviewer" \
| grep -o " [0-9x+-]* * [0-9+-]* *$" \
| sed -e 's/^ *//' -e 's/+.*$//')
jitsi_resolution=$(DISPLAY=:"$x" xwininfo -root -children \
| grep "Jitsi Meet" \
| grep -o " [0-9x+-]* * [0-9+-]* *$" \
| sed -e 's/^ *//' -e 's/+.*$//')
if [ -z "$server_resolution" ]; then
echo "problem: cannot determine server resolution"
elif [ -z "$vnc_resolution" ]; then
if [ -z "$jitsi_resolution" ]; then
if [ "$server_resolution" != "$max_resolution" ]; then
echo "No VNC or Jitsi Meet session found. Resetting resolution ..."
switch_to_resolution "$x" "$y" "$max_resolution"
fi
else
if [ "$server_resolution" != "$jitsi_resolution" ]; then
echo "No VNC session found, but a Jitsi Meet session. Adjusting resolution."
if $enable_experimental_features; then
for window_id in $(DISPLAY=:"$x" xwininfo -root -children \
| grep "Jitsi Meet" \
| cut -b 6-14); do
DISPLAY=":$x" xdotool windowsize "$window_id" "$jitsi_max_width" "$jitsi_max_height"
DISPLAY=":$x" xdotool windowmove "$window_id" 0 0
jitsi_resolution="$jitsi_max_width"x"$jitsi_max_height"
done
fi
switch_to_resolution "$x" "$y" "$jitsi_resolution"
fi
fi
elif $just_started; then
if [ "$server_resolution" = "$vnc_resolution" ]; then
echo "Server resolution already matches the new VNC. Warping cursor."
DISPLAY=:"$x" swarp 0 0
else
echo "Adjusting resolution for new VNC ..."
switch_to_resolution "$x" "$y" "$vnc_resolution"
fi
if $enable_experimental_features; then
vnc_width=$(echo $vnc_resolution | cut -d "x" -f 1)
vnc_height=$(echo $vnc_resolution | cut -d "x" -f 2)
jitsi_x=$((vnc_width - jitsi_min_width))
jitsi_y=$((vnc_height - jitsi_min_height))
for window_id in $(DISPLAY=:"$x" xwininfo -root -children \
| grep "Jitsi Meet" \
| cut -b 6-14); do
DISPLAY=":$x" xdotool windowsize "$window_id" "$jitsi_min_width" "$jitsi_min_height"
DISPLAY=":$x" xdotool windowmove "$window_id" "$jitsi_x" "$jitsi_y"
DISPLAY=":$x" xdotool windowraise "$window_id"
done
fi
elif [ -z "$jitsi_resolution" ] && [ "$server_resolution" != "$vnc_resolution" ]; then
sleep 2s
jitsi_resolution=$(DISPLAY=:"$x" xwininfo -root -children \
| grep "Jitsi Meet" \
| grep -o " [0-9x+-]* * [0-9+-]* *$" \
| sed -e 's/^ *//' -e 's/+.*$//')
if [ -z "$jitsi_resolution" ]; then
echo "Adjusting resolution for old VNC ..."
switch_to_resolution "$x" "$y" "$vnc_resolution"
else
echo "There seems to be a Jitsi Meet session just starting. Waiting for it."
fi
fi
sleep 2
done
[Unit]
Description=botamusique Peter Gerwinski
After=syslog.target network.target
[Service]
Type=simple
User=pgerwinski
ExecStart=/usr/local/bin/botamusique --config /home/pgerwinski/.config/botamusique/configuration.ini
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
[Unit]
Description=Jitsi-Bot %i
After=syslog.target apache2.target novnc@%i.target
[Service]
Type=simple
User=root
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/jitsibot %i
Restart=always
[Install]
WantedBy=multi-user.target
[Unit]
Description = start noVNC service %i
After=syslog.target network.target
[Service]
Type=simple
User=novnc
ExecStart = /usr/local/sbin/hsbo_novnc %i
[Install]
WantedBy=multi-user.target
[Unit]
Description=VNC-Bot %i
After=syslog.target apache2.target vncserver@%i.target
[Service]
Type=simple
User=pgerwinski
WorkingDirectory=/home/pgerwinski
ExecStart=/home/pgerwinski/autovnc %i
Restart=always
[Install]
WantedBy=multi-user.target
#!/bin/bash
vncserver="tigervncserver"
vncserveropts="-depth 24" # add "-localhost no" to make it listen on all IPs
testfile="$HOME/vnc-testbild.pdf"
HOME="/home/pgerwinski"
max_resolution="1920x1080"
half_resolution="960x540"
x="$1"
case "$x" in
[1-6])
true
;;
*)
echo "usage: $0 <channel>"
exit 1
;;
esac
y=$((x + 6))
z=$((x + 9500))
cleanup ()
{
HOME=$HOME/vnc$x "$vncserver" -kill :$x
HOME=$HOME/vnc$y "$vncserver" -kill :$y
}
trap cleanup exit
HOME=$HOME/vnc$x "$vncserver" :$x $vncserveropts -geometry $max_resolution
HOME=$HOME/vnc$y "$vncserver" :$y $vncserveropts -geometry $half_resolution
sleep 2
echo "Setting up full-resolution channel ..."
DISPLAY=:$x xrandr --output VNC-0 --newmode 1916x1056 168.93 1920 2040 2248 2576 1056 1057 1060 1093 -HSync +Vsync
DISPLAY=:$x xrandr --addmode VNC-0 1916x1056
DISPLAY=:$x xrandr --output VNC-0 --newmode 1504x1000 125.19 1504 1600 1760 2016 1000 1001 1004 1035 -HSync +Vsync
DISPLAY=:$x xrandr --addmode VNC-0 1504x1000
DISPLAY=:$x xsetroot -cursor_name arrow
DISPLAY=:$x swarp 10000 10000
(HOME=$HOME/vnc$x DISPLAY=:$x xpdf -fullscreen "$testfile" $x &)
(DISPLAY=:$x HOME=~/vnc$x/.vnc x11vnc -xrandr -localhost -scale 1/2 -rfbport $z &)
sleep 10
echo "Setting up half-resolution channel ..."
DISPLAY=:$x xrandr --output VNC-0 --newmode 958x528 39.91 960 992 1088 1216 528 529 532 547 -HSync +Vsync
DISPLAY=:$x xrandr --addmode VNC-0 960x528
DISPLAY=:$y xrandr --output VNC-0 --newmode 752x500 29.34 752 776 848 944 500 501 504 518 -HSync +Vsync
DISPLAY=:$y xrandr --addmode VNC-0 752x500
DISPLAY=:$y xrandr --output VNC-0 --newmode 512x384 14.90 512 520 568 624 384 385 388 398 -HSync +VSync
DISPLAY=:$y xrandr --addmode VNC-0 512x384
DISPLAY=:$y xsetroot -cursor_name arrow
DISPLAY=:$y swarp 10000 10000
(DISPLAY=:$y xtightvncviewer -passwd $HOME/vnc$y/.vnc/passwd -depth 24 -geometry $half_resolution+0+0 :$z &)
while true; do
sleep 1h
done
[Unit]
Description=VNC-Server %i
After=syslog.target apache2.target
[Service]
Type=simple
User=pgerwinski
WorkingDirectory=/home/pgerwinski
ExecStart=/home/pgerwinski/vncserver %i
Restart=always
[Install]
WantedBy=multi-user.target
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment