Weiterleitung der Seriellen Schittstelle eines Thin-Clients

german

#1

Hallo,

Zielsetzung war, bei einer DVS-Sitzung mit Windows XP, die lokale Serielle Schnittstelle eines Thin Client innerhalb der VM zur Verfügung zu stellen. Dies ist zwar geglückt, aber leider bin ich dabei auf ein Problem gestossen.

Nach dem Start des Thin-Clients sind dort die Berechtigungen für /dev/ttyS0 nicht ausreichend.
Dafür habe ich im UDM am Rechner-Objekt des Thin Clients folgende UCR-Variable angelegt:

startup/ttyS0 mit dem Wert chmod o+rw /dev/ttyS0

Zusätzlich müsste beim Start von rdesktop noch folgendes Parameter mitgegeben werden:

-r comport:COM1=ttyS0

Das ist dann aber leider nicht per UCR Variable möglich, da die UCR Variable rdp/redirect scheinbar vom univention-dvs-sessionbroker-client Skript, welches rdesktop startet, ignoriert wird. Dies geschieht auch mit anderen im TCS-Handbuch angegebenen rdp Variablen.

Deshalb habe ich die Datei /var/lib/univention-client-root/usr/bin/univention-dvs-sessionbroker-client angepasst und um cmd += [’-r’, ‘comport:COM1=/dev/ttyS0’] erweitert, was natürlich nach einem Update des Skriptes von Univention wieder weg sein wird.

def connect_rdp_command_linux(response_dict, options):
        """Connect to VM using Remote Desktop Protocol.""" 

        ## connect to desktop_host
        cmd = ['rdesktop', '-a', '16']

        if options.username:
                cmd += ['-u', options.username]
        if options.password:
                cmd += ['-p', options.password]
        XkbLayout = baseConfig.get('xorg/keyboard/options/XkbLayout')
        if XkbLayout:
                p = subprocess.Popen(['univention-keyboardmapping', '--xtordp', XkbLayout], stdout=subprocess.PIPE)
                stdout, stderr = p.communicate()
                rdpKeyboard = stdout.strip()
                if rdpKeyboard:
                        cmd += ['-k', rdpKeyboard]
        if response_dict.get('univentionDVSRdpUSBDevices') == '1':
                cmd += ['-r', 'disk:USB=/var/run/drives/']
        if response_dict.get('univentionDVSRdpSmartcard') == '1':
                cmd += ['-r', 'scard']
        if response_dict.get('univentionDVSRdpPrinter') == '1':
                cmd += ['-r', 'lptport:LPT2=/dev/usb/lp0,LPT3=/dev/lp0']
        if response_dict.get('univentionDVSRdpSound') == '1':
                cmd += ['-r', 'sound:local']

################## edit uf - 14.05.2012
        cmd += ['-r', 'comport:COM1=/dev/ttyS0']
################## edit ende

        cmd += ['-r', 'clientname="Thinclient"']
        if options.fullscreen:
                cmd += ['-f', ]
        cmd += ['-n', "%(hostname)s" % baseConfig, ]
        windowsDomain = response_dict.get('univentionDVSWindowsDomain')
        if windowsDomain:
                cmd += ['-d', windowsDomain]
        cmd.append(response_dict['desktop_host'])

        if options.debug:
                import shlex
                cmd = shlex.split(options.debug) + cmd
        return cmd

Es wäre praktisch, wenn die gesetzten rdp Variablen auch beim Starten einer DVS-Sitzung greifen würden.
Oder habe ich irgend etwas übersehen?

MfG
uf


#2

Hallo,

erst einmal vielen Dank für Ihre ausführliche Schilderung und Anregung!
Sie haben an dieser Stelle nichts übersehen. Die Variable “rdp/redirect” wird in einem Paket aus UCS TCS registriert und kann daher nicht automatisch in UCS DVS ausgewertet werden, da dieses auch ohne UCS TCS betreibbar ist.

Ich habe hierzu einen entsprechenden Eintrag in unserem Bugtracking System erstellt, welchen Sie gern unter [bug]27145[/bug] einsehen können.

Mit freundlichen Grüßen,
Tim Petersen


#3

Hallo,

vielen Dank für Ihre Antwort und den Eintrag ins Bugtracking System.

MfG
uf