First draft

This is just a scattering of notes and proofs of concepts.
This commit is contained in:
Thomas Buckley-Houston 2016-04-23 00:58:05 +03:00
commit c27e72bcfa
5 changed files with 74 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*.log
*.out

3
Dockerfile Normal file
View file

@ -0,0 +1,3 @@
FROM alpine
RUN apk add xvfb xdotool xfce4 ffmpeg chromium
RUN rm -rf /var/cache/apk/*

41
do.bash Executable file
View file

@ -0,0 +1,41 @@
#
# This is AWESOME.
#
# Original code by: Chris F.A. Johnson
#
ESC="" ## A literal escape character
but_row=1
clear
mv=1000 ## mv=1000 for press and release reporting; mv=9 for press only
_STTY=$(stty -g) ## Save current terminal setup
stty -echo -icanon ## Turn off line buffering
printf "${ESC}[?${mv}h " ## Turn on mouse reporting
printf "${ESC}[?25l" ## Turn off cursor
while :
do
x=$(dd bs=1 count=6 2>/dev/null) ## Read six characters
m1=${x#???} ## Remove the first 3 characters
m2=${x#????} ## Remove the first 4 characters
m3=${x#?????} ## Remove the first 5 characters
## Convert to characters to decimal values
eval "$(printf "mb=%d mx=%d my=%d" "'$m1" "'$m2" "'$m3")"
## Values > 127 are signed
[ $mx -lt 0 ] && MOUSEX=$(( 223 + $mx )) || MOUSEX=$(( $mx - 32 ))
[ $my -lt 0 ] && MOUSEY=$(( 223 + $my )) || MOUSEY=$(( $my - 32 ))
## Button pressed is in first 2 bits; use bitwise AND
BUTTON=$(( ($mb & 3) + 1 ))
echo $MOUSEX $MOUSEY $BUTTON > mouse.out
done
printf "${ESC}[?${mv}l" ## Turn off mouse reporting
stty "$_STTY" ## Restore terminal settings
printf "${ESC}[?12l${ESC}[?25h" ## Turn cursor back on
printf "\n${ESC}[0J\n" ## Clear from cursor to bottom of screen

21
forward_mouse.rb Normal file
View file

@ -0,0 +1,21 @@
require 'curses'
include Curses
# These 2 allow mouse input
noecho # Prevent input being echoed to the screen
stdscr.keypad(true) # Not sure what this does exactly, but mouse input doesn't work without it
# Block whilst waiting for input
stdscr.timeout = -1
mousemask(ALL_MOUSE_EVENTS)
loop do
case getch
when KEY_MOUSE
m = getmouse
File.open('/home/tombh/Workspace/lowbandwidth/mouse.out', 'w') do |file|
file.write("#{m.x}, #{m.y}, #{m.z}, #{m.bstate}")
end
end
end

7
run.bash Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
ffmpeg -f x11grab -s 3200x1600 -r 12 -i :0.0 -vcodec mpeg2video -f mpegts udp://127.0.0.1:1234 >> ffmpeg.log 2>&1 &
sleep 1
# (/home/tombh/.rbenv/versions/2.3.0/bin/ruby ./forward_mouse.rb <&3 &) 3<&0
(./do.bash <&3 &) 3<&0
hiptext -width 95 -font /usr/share/fonts/TTF/DejaVuSansMono.ttf 'udp://127.0.0.1:1234' 2> hiptext.log
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT