Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:fschuett
epoptes
epoptes-client-x11vnc-wrapper.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File epoptes-client-x11vnc-wrapper.patch of Package epoptes
=== modified file 'data/client-functions' --- data/client-functions 2015-08-22 17:30:18 +0000 +++ data/client-functions 2015-10-23 12:48:04 +0000 @@ -234,7 +234,7 @@ # $1 = port. # $2 = grab keyboard and mouse. get_assisted() { - background x11vnc -noshm -24to32 ${2:+-grabptr -grabkbd} -connect_or_exit "$SERVER:$1" + background ./x11vnc-wrapper -noshm -24to32 ${2:+-grabptr -grabkbd} -connect_or_exit "$SERVER:$1" } # Deactivate the screensaver, in order for the users to watch a broadcast. === added file 'epoptes-client/x11vnc-wrapper' --- epoptes-client/x11vnc-wrapper 1970-01-01 00:00:00 +0000 +++ epoptes-client/x11vnc-wrapper 2015-10-23 12:48:04 +0000 @@ -0,0 +1,129 @@ +#!/bin/sh +########################################################################### +# Wraps x11vnc with an alternative treatment +# for -grabkbd and -grabptr options. +# +# This is a workaround for a x11vnc -grabptr limitation +# where only mouse buttons, but not pointer movement, +# can be grabbed. +# +# It's also a workaround for a x11vnc bug where +# remote client windows can't be dragged within +# VNC viewer, if -grabkbd is passed. +# (https://github.com/LibVNC/x11vnc/issues/18) +# +# Usage: x11vnc-wrapper <x11vnc args> +# +# Copyright (C) 2015 LaƩrcio de Sousa <laerciosousa@sme-mogidascruzes.sp.gov.br> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# On Debian GNU/Linux systems, the complete text of the GNU General +# Public License can be found in `/usr/share/common-licenses/GPL'. +########################################################################### +# Grab pointer devices. +# Parameters: +# $1..$N = devices' IDs +grab_pointer_devices() { + while [ ${#} -gt 0 ] + do + xinput --set-prop "${1}" "Device Accel Constant Deceleration" 999999 + shift + done +} + +# Ungrab pointer devices. +# Parameters: +# $1..$N = devices' IDs +ungrab_pointer_devices() { + while [ ${#} -gt 0 ] + do + xinput --set-prop "${1}" "Device Accel Constant Deceleration" 1 + shift + done +} + +# Grab key devices. +# Parameters: +# $1..$N = devices' IDs +grab_key_devices() { + while [ ${#} -gt 0 ] + do + xinput --disable "${1}" + shift + done +} + +# Ungrab key devices. +# Parameters: +# $1..$N = devices' IDs +ungrab_key_devices() { + while [ ${#} -gt 0 ] + do + xinput --enable "${1}" + shift + done +} + +keyboards= +pointers= + +while [ ${#} -gt 0 ] +do + case "${1}" in + -grabkbd) + keyboards="$(xinput --list | awk '/slave.*keyboard/ { + if ($0 !~ /XTEST/) { + match($0, /id=[0-9]+/) + if (RSTART) + print substr($0, RSTART+3, RLENGTH-3) + } + }')" + ;; + + -grabptr) + args="${args} ${1}" + pointers="$(xinput --list | awk '/slave.*pointer/ { + if ($0 !~ /XTEST/) { + match($0, /id=[0-9]+/) + if (RSTART) + print substr($0, RSTART+3, RLENGTH-3) + } + }')" + ;; + + *) + args="${args} ${1}" + ;; + esac + + shift +done + +grab_key_devices ${keyboards} +grab_pointer_devices ${pointers} + +# Just a safety measure to ensure input devices +# will be properly ungrabbed if we receive a +# SIGTERM or SIGINT while x11vnc is running. +# +# Uses SIGTERM-propagation scheme as proposed in +# http://veithen.github.io/2014/11/16/sigterm-propagation.html +trap 'kill -TERM ${x11vnc_pid}; ungrab_key_devices ${keyboards}; ungrab_pointer_devices ${pointers}; exit 0' TERM INT +x11vnc ${args} & +x11vnc_pid=${!} +wait ${x11vnc_pid} + +ungrab_key_devices ${keyboards} +ungrab_pointer_devices ${pointers}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor