====== TeamViewer unter Linux ====== Wir setzen TeamViewer für Kunden-Fernwartungen und für Online-Meetings ein. Die Software ist eine der am besten Funktionierenden, die ich kenne. Um so erstaunlicher, wenn man sich mal das Konstrukt ansieht, wie TeamViewer unter Linux ausgeführt wird. Man schaue mal mit dem Kommando ''ps ax'' in die Prozessliste und siehe, welch gruselige Prozesse da ihr Unwesen treiben, wenn TeamViewer läuft: PID TTY STAT TIME COMMAND 3693 ? Sl 0:08 /opt/teamviewer/tv_bin/teamviewerd -d 14905 ? Ss 0:00 /opt/teamviewer/tv_bin/wine/bin/wineserver 14920 ? Ssl 0:00 C:\windows\system32\services.exe 14924 ? Ssl 0:00 C:\windows\system32\explorer.exe /desktop 14928 ? Sl 0:00 /opt/teamviewer/tv_bin/TVGuiSlave.64 13 1 14931 ? Sl 0:00 /opt/teamviewer/tv_bin/TVGuiDelegate 13 1 14846 ? Sl 0:01 c:\TeamViewer\TeamViewer.exe TeamViewer läuft zur Hälfte als native Linux-, zur Hälfte als mit wine emulierte Windows-Anwendung.((Siehe auch: [[http://blog.teamviewer.com/linux-cute/|http://blog.teamviewer.com/linux-cute/]])) Echt „crazy shit“. Offenbar ist so langsam alles natives Linuxzeug, bis auf -- ausgerechnet -- die GUI. 8-O Ein hardcore Debian-User kann das nur verachten. Vor allem weil es dabei ja auch noch um properitäre Software geht. Aber ich bin Geschäftsmann, und TeamViewer läuft super. Außerdem stehen die Vermittlungsserver in Deutschland, daher muss man beim Thema Datenschutz den Kopf auch nicht ganz in den Sand stecken. TeamViewer läuft unter allen Betriebssystemen, und auch ein DAU((„Dümmster anzunehmender User“)) schafft es noch, das Ding zu starten. Zumindest fast alle. ===== Installationsprobleme ===== Unter Debian lässt sich das 64-bit-Paket {{http://files.reneknipschild.net/software/foreign/teamviewer_10.0.36281_amd64.deb|teamviewer_10.0.36281_amd64.deb}} per # dpkg -i teamviewer_10.0.36281_amd64.deb nicht immer gleich fehlerfrei installiern, weil die ia32libs nicht mehr verfügbar sind. Um das Problem zu umgehen zunächst # dpkg --add-architecture i386 # apt-get update ausführen und dann nochmal die fehlgeschlagene Installation anwerfen: # apt-get -f install Weitere Infos dazu unter: [[http://www.teamviewer.com/de/help/363-How-do-I-install-TeamViewer-on-my-Linux-distribution.aspx|http://www.teamviewer.com/de/help/363-How-do-I-install-TeamViewer-on-my-Linux-distribution.aspx]] ===== Gut aber nicht perfekt ===== In TeamViewer 10.0.36281 wine-1.6 unter Debian 7 habe ich das Problem gehabt((In der darauf folgend installierten Version, dem Update zu Version 10.0.37742 wine-1.6, schien das Problem zunächst behoben worden zu sein, später tauchte es aber wieder auf.)), dass meine Webcam nicht lief. Im Einstellungsdialog von TeamViewer und in den Sitzungen blieb das Bild einfach weiß. # lsusb ... Bus 002 Device 002: ID 05a9:7670 OmniVision Technologies, Inc. OV7670 Webcam ... Die TeamViewer GmbH teilte mir dazu mit, dass * Kameras nicht unterstützt werden. Ich finde es ja sowieso erstaunlich, dass man mit so einem Wine-Konstrukt überhaupt Ton+Bild hinkriegt. Aber ich dachte mir, wenn man irgendwelche Webcams unter Linux ansprechen kann, dann meine auch. Muss doch nur die Webcam in ein unterstütztes virtuelles Device umleiten. Und so experimentierte ich mit einigen Tools herum, unter anderem ucanvcam. Das Ende vom Lied war, dass ich folgenden ffmpeg-Befehl und das Kernelmodul v4l2loopback benutzt habe: ffmpeg -f video4linux2 -i /dev/video0 -vcodec copy -f v4l2 /dev/video1 -vcodec copy -f v4l2 /dev/video2 Keine Ahnung, gab ne Fehlermeldung, weiß nicht warum. Aber nachdem dieser Befehl ausgeführt wurde, läuft (bis zum Neustart) die Webcam in TeamViewer! Habe TeamViewer auch mitgeteilt, dass sie (gegen Entgelt) von mir einen heißen Tipp dazu kriegen. Ich habe entsprechend das TeamViewerD-Startskript angepasst, da ist der Befehl gut aufgehoben: {{:comp:linux:tvdupgr.png?nolink|Mein gehacktes TVStart-Skript}} Und siehe da: Wie erwartet wird nun bei jedem teamviewerd-Start, also z.B. beim Neustart des Rechners, dieser Befehl ausgeführt. Hier das komplette Skript ''/etc/init.d/teamviewerd'' zum Austauschen, wenn benötigt (bzw. zum Einfügen ab Zeile 57). Man muss ggf. vorher noch sicherstellen, dass das Kernelmodul ''v4l2loopback'' ladbar/vorhanden ist. #!/bin/bash # # /etc/init.d/teamviewerd # # chkconfig: 2345 95 05 # description: daemon for TeamViewer # # processname: teamviewerd # config: /etc/teamviewer/global.conf # pidfile: /var/run/teamviewerd.pid ### BEGIN INIT INFO # Provides: teamviewerd # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Required-Start: $all # Required-Stop: $local_fs $network $named # Short-Description: TeamViewer remote control daemon # Description: TeamViewer remote control daemon ### END INIT INFO RETVAL=0 prog="teamviewerd" prog_dir="/opt/teamviewer/tv_bin" prog_path="$prog_dir/$prog" prog_args="-d" pidfile="/var/run/teamviewerd.pid" lockdir='/var/lock/subsys' [ -d $lockdir ] || lockdir='/var/lock' lockfile=$lockdir/$prog function Main() { case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) restart ;; status) status ;; *) helpmsg ;; esac exit $RETVAL } function start() { echo -n $"Starting $prog..." [ -S /var/run/dbus/system_bus_socket ] && \ [ -e /usr/share/dbus-1/system-services/org.freedesktop.ConsoleKit.service ] && \ $prog_dir/script/wait-console-kit.sh $prog_path $prog_args # Hack by rkCSD for WebCam usage with TeamViewer echo -n $"rkCSD-AddOn: Hacking TeamViewer webcam support..." modprobe v4l2loopback devices=2 ffmpeg -f video4linux2 -i /dev/video0 -vcodec copy -f v4l2 /dev/video1 -vcodec copy -f v4l2 /dev/video2 RETVAL=$? [ "$RETVAL" = 0 ] && touch $lockfile echo } function stop() { echo -n $"Stopping $prog... " killDaemon RETVAL=$? [ "$RETVAL" = 0 ] && rm -f $lockfile echo } function restart() { stop [ "$RETVAL" = 0 ] || return start } function status() { RETVAL=0 isRunning && echo "$prog start/running" && return echo "$prog stop/waiting" } function helpmsg() { echo $"Usage: $0 {start|stop|restart|status}" RETVAL=1 } function isRunning() { local pid=$(getPID) [ -n "$pid" ] || return readlink /proc/$pid/exe | grep -q $prog } function getPID() { cat $pidfile 2> /dev/null } function killDaemon() { cmdExists killproc && killproc $prog_path && return isRunning || echo not running isRunning || return 0 local repeat=30 local pid=$(getPID) [ -n "$pid" ] || return kill -TERM $pid 2> /dev/null until [ $repeat = 0 ]; do isRunning || break echo -n '. ' sleep 0.33 let repeat-=1 done isRunning || return 0 kill -KILL $pid 2> /dev/null } function cmdExists() { command -v "$1" >/dev/null 2>&1 } Main "$@" Falls Sie ein System mit ''systemd'' statt ''initd'' verwenden (z.B. Debian 8 "jessie"), kopieren Sie folgendes Skript in die Datei ''/opt/teamviewer/tv_bin/rkCSD-TeamViewerD_Start.sh'': #!/bin/sh # Hack by rkCSD for WebCam usage with TeamViewer echo -n $"rkCSD-AddOn: Hacking TeamViewer webcam support..." modprobe v4l2loopback devices=2 timeout 1 ffmpeg -f video4linux2 -i /dev/video0 -vcodec copy -f v4l2 /dev/video1 -vcodec copy -f v4l2 /dev/video2 /opt/teamviewer/tv_bin/teamviewerd -d Editieren Sie die Datei ''/etc/systemd/system/teamviewerd.service'' und tauschen Sie den Inhalt des Parameters ''ExecStart'' durch den Pfad der obigen Datei. **Bei allen in diesem Artikel beschriebenen Änderungen wird TeamViewer nicht manipuliert oder verändert, sondern die Rahmenbedingungen des Systems so umkonfiguriert, dass die Wine-Umgebung von TeamViewer damit zurechtkommt!** So ist das Webcambild nun nicht mehr weiß, sondern es funktioniert: {{:comp:linux:rktvwebcam.png?nolink|Es funktioniert! Hallo!}} ===== Teamviewerd abschalten ===== Der Sinn und Zweck des ''teamviewerd'', also des Systemdienstes von TeamViewer, erschließt sich mir nicht in Gänze. TeamViewer, oder ein Teil davon, läuft somit, mit Rootrechten!, die ganze Zeit im Hintergrund. Die Wine-Gui wird somit "ermächtigt", was teilweise sicher gut und sinnvoll ist. Aber wer weiß, was damit alles für ein Unfug auf dem System gemacht werden kann, wenn das andauernd läuft. Auf normalen Desktop-Systemen empfehle ich daher, den Dienst abzuschalten. # update-rc.d teamviewerd remove Im Falle von ''systemd'' (z.B. Debian 8 "jessie") lautet der Befehl # systemctl disable teamviewerd Bevor man TeamViewer verwenden will, muss man dann halt per # service teamviewerd start den Dienst starten, denn sonst läuft TeamViewer unter Linux nicht. {{:comp:linux:teamviewerd.png?nolink|Teamviewerd läuft nicht}} Diesen Schritt (Deaktivierung des Dienstes) muss man allerdings nach jedem Update neu vornehmen! Das entsprechende Installationsskript aktiviert ja logischerweise den Dienst.