Package: tsclient Version: 0.148-3 Severity: wishlist Tags: patch Hi,
A long-time missing feature in tsclient is the ability to map a local directory to a remote computer in RDPv5. A patch available on sourceforge address this (see URL below, also attached here for your convenience). However, you probably need to upgrade to the latest version (0.150) to make apply it cleanly. URL to the patch on sourceforge : http://sourceforge.net/tracker/index.php?func=detail&aid=1822832&group_id=192483&atid=941576 Cheers, -- System Information: Debian Release: lenny/sid APT prefers unstable APT policy: (990, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 2.6.20-1-xen-amd64 (SMP w/1 CPU core) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages tsclient depends on: ii libatk1.0-0 1.18.0-2 The ATK accessibility toolkit ii libbonoboui2-0 2.18.0-5 The Bonobo UI library ii libc6 2.6.1-1 GNU C Library: Shared libraries ii libglib2.0-0 2.14.0-2 The GLib library of C routines ii libgnome2-0 2.18.0-4 The GNOME 2 library - runtime file ii libgnomeui-0 2.18.1-2 The GNOME 2 libraries (User Interf ii libgtk2.0-0 2.10.13-1 The GTK+ graphical user interface ii libpanel-applet2-0 2.18.3-1 library for GNOME Panel applets ii rdesktop 1.5.0-2 RDP client for Windows NT/2000 Ter tsclient recommends no packages. -- no debconf information
diff -ur tsclient-0.150/src/connect.c tsclient-0.151/src/connect.c --- tsclient-0.150/src/connect.c 2007-04-11 20:15:35.000000000 +0200 +++ tsclient-0.151/src/connect.c 2007-10-30 15:03:42.000000000 +0100 @@ -175,6 +175,16 @@ GtkWidget *cboKeyboardLang; GtkWidget *txtKeyboardLang; + // Drive mapping + GtkWidget *chkDiskMapping; + + // Drive mapping Widgets + GtkWidget *frameDrive; + GtkWidget *lblDriveFrame; + GtkWidget *tblDrive; + GtkWidget *imgDrive; + GtkWidget *vbxDrive; + // Program Tab Widgets GtkWidget *lblProgramsTab1; @@ -191,6 +201,7 @@ // Performance Tab Widgets GtkWidget *lblPerformanceTab1; + GtkWidget *vbxPerformanceTab1; // Performance Frame Widgets GtkWidget *framePerform; @@ -689,7 +700,6 @@ gtk_option_menu_set_menu (GTK_OPTION_MENU (optKeyboard), mnuKeyboard); - lblKeyboardLang = gtk_label_new (_("Use the following keyboard language\n(2 char keycode)")); gtk_table_attach (GTK_TABLE (tblKeyboard), lblKeyboardLang, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), @@ -777,9 +787,15 @@ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); + // Last tab (Performance) + vbxPerformanceTab1 = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (nbkComplete), vbxPerformanceTab1); + gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (nbkComplete), vbxPerformanceTab1, + TRUE, TRUE, GTK_PACK_START); + framePerform = gtk_frame_new (NULL); - gtk_container_add (GTK_CONTAINER (nbkComplete), framePerform); + gtk_container_add (GTK_CONTAINER (vbxPerformanceTab1), framePerform); gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (nbkComplete), framePerform, TRUE, TRUE, GTK_PACK_START); gtk_container_set_border_width (GTK_CONTAINER (framePerform), 3); @@ -840,6 +856,37 @@ gtk_label_set_line_wrap (GTK_LABEL (lblPerformanceOptions), TRUE); gtk_misc_set_alignment (GTK_MISC (lblPerformanceOptions), 0, 0.5); + + frameDrive = gtk_frame_new (NULL); + // Add the new frame to the Local ressource tab + gtk_box_pack_start (GTK_BOX (vbxLocalTab1), frameDrive, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (frameDrive), 3); + gtk_frame_set_shadow_type (GTK_FRAME (frameDrive), GTK_SHADOW_NONE); + + lblDriveFrame = gtk_label_new_with_mnemonic (_("Remotely map your disk drive")); + gtk_label_set_markup (GTK_LABEL (lblDriveFrame), g_strconcat ("<span weight=\"bold\">", _("Remotely map your disk drive"), "</span>", NULL)); + gtk_frame_set_label_widget (GTK_FRAME (frameDrive), lblDriveFrame); + gtk_label_set_justify (GTK_LABEL (lblDriveFrame), GTK_JUSTIFY_LEFT); + + tblDrive = gtk_table_new (1, 2, FALSE); + gtk_container_add (GTK_CONTAINER (frameDrive), tblDrive); + gtk_table_set_col_spacings (GTK_TABLE (tblDrive), 6); + + imgDrive = create_pixmap (frmConnect, "harddrive.png"); + gtk_misc_set_padding (GTK_MISC (imgDrive), 3, 3); + gtk_table_attach (GTK_TABLE (tblDrive), imgDrive, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) 0, 0, 0); + + vbxDrive = gtk_vbox_new (FALSE, 0); + gtk_table_attach (GTK_TABLE (tblDrive), vbxDrive, 1, 2, 0, 2, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + + chkDiskMapping = gtk_check_button_new_with_mnemonic (_("Add my local drive to the remote computer")); + gtk_box_pack_start (GTK_BOX (vbxDrive), chkDiskMapping, FALSE, FALSE, 0); + + /* These are the labels for the notebook control */ @@ -1090,6 +1137,8 @@ HOOKUP_OBJECT (frmConnect, txtKeyboardLang, "txtKeyboardLang"); HOOKUP_OBJECT (frmConnect, imgKeyboard, "imgKeyboard"); + // Drive mapping + HOOKUP_OBJECT (frmConnect, chkDiskMapping, "chkDiskMapping"); // Program Tab Widgets HOOKUP_OBJECT (frmConnect, lblProgramsTab1, "lblProgramsTab1"); Seulement dans tsclient-0.151/src: .deps Seulement dans tsclient-0.151/src: Makefile diff -ur tsclient-0.150/src/rdpfile.c tsclient-0.151/src/rdpfile.c --- tsclient-0.150/src/rdpfile.c 2007-04-11 17:41:39.000000000 +0200 +++ tsclient-0.151/src/rdpfile.c 2007-10-24 11:42:09.000000000 +0200 @@ -39,6 +39,7 @@ rdp->attach_to_console = 0; rdp->audiomode = 0; rdp->auto_connect = 0; + rdp->diskmapping = 0; rdp->bitmapcachepersistenable = 0; rdp->client_hostname = ""; rdp->compression = 0; @@ -195,6 +196,7 @@ buffer = g_strconcat (buffer, "attach to console:i:", g_strdup_printf("%d",rdp->attach_to_console), "\r\n", NULL); buffer = g_strconcat (buffer, "audiomode:i:", g_strdup_printf("%d",rdp->audiomode), "\r\n", NULL); buffer = g_strconcat (buffer, "auto connect:i:", g_strdup_printf("%d",rdp->auto_connect), "\r\n", NULL); + buffer = g_strconcat (buffer, "diskmapping:i:", g_strdup_printf("%d",rdp->diskmapping), "\r\n", NULL); buffer = g_strconcat (buffer, "bitmapcachepersistenable:i:", g_strdup_printf("%d",rdp->bitmapcachepersistenable), "\r\n", NULL); buffer = g_strconcat (buffer, "client hostname:s:", rdp->client_hostname, "\r\n", NULL); buffer = g_strconcat (buffer, "compression:i:", g_strdup_printf("%d",rdp->compression), "\r\n", NULL); @@ -395,7 +397,6 @@ gtk_editable_delete_text ((GtkEditable*) widget, 0, -1); gtk_editable_insert_text((GtkEditable*) widget, (gchar *)rdp->keyboard_language, strlen(rdp->keyboard_language), &pos); - widget = lookup_widget (main_window, "chkStartProgram"); if (rdp->enable_alternate_shell == 1) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); @@ -421,6 +422,7 @@ } // the checkboxes on the performance frame + widget = lookup_widget (main_window, "chkBitmapCache"); if (rdp->bitmapcachepersistenable == 1) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); @@ -509,6 +511,12 @@ gtk_option_menu_set_history (GTK_OPTION_MENU(widget), 0); break; } */ + + widget = lookup_widget (main_window, "chkDiskMapping"); + if (rdp->diskmapping == 1) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); tsc_set_protocol_widgets (main_window, rdp->protocol); @@ -700,6 +708,11 @@ value = gtk_editable_get_chars ((GtkEditable*) widget, 0, -1); if (value) rdp->shell_working_directory = value; + widget = lookup_widget (main_window, "chkDiskMapping"); + if (gtk_toggle_button_get_active ((GtkToggleButton*)widget)) + rdp->diskmapping = 1; + else + rdp->diskmapping = 0; widget = lookup_widget (main_window, "chkBitmapCache"); if (!gtk_toggle_button_get_active ((GtkToggleButton*)widget)) @@ -707,7 +720,6 @@ else rdp->bitmapcachepersistenable = 0; - widget = lookup_widget (main_window, "chkDesktopBackground"); if (!gtk_toggle_button_get_active ((GtkToggleButton*)widget)) rdp->disable_wallpaper = 1; @@ -814,6 +826,11 @@ if (strcmp(key, "auto connect") == 0) { rdp->auto_connect = atoi(value); } + + if (strcmp(key, "diskmapping") == 0) { + rdp->diskmapping = atoi(value); + } + if (strcmp(key, "bitmapcachepersistenable") == 0) { rdp->bitmapcachepersistenable = atoi(value); } diff -ur tsclient-0.150/src/rdpfile.h tsclient-0.151/src/rdpfile.h --- tsclient-0.150/src/rdpfile.h 2007-04-11 17:19:49.000000000 +0200 +++ tsclient-0.151/src/rdpfile.h 2007-10-11 01:37:07.000000000 +0200 @@ -23,6 +23,7 @@ int attach_to_console; int audiomode; int auto_connect; + int diskmapping; int bitmapcachepersistenable; char *client_hostname; int compression; diff -ur tsclient-0.150/src/support.c tsclient-0.151/src/support.c --- tsclient-0.150/src/support.c 2007-04-19 22:49:22.000000000 +0200 +++ tsclient-0.151/src/support.c 2007-10-24 15:33:35.000000000 +0200 @@ -376,7 +376,7 @@ sprintf(buffer, cmd); c_argv[c_argc++] = g_strdup (buffer); - sprintf(buffer, "-T%s - %s", rdp->full_address, _("Terminal Server Client")); + sprintf(buffer, "-T\'%s - %s\'", rdp->full_address, _("Terminal Server Client")); c_argv[c_argc++] = g_strdup (buffer); // full window mode - use all opts @@ -459,20 +459,26 @@ // Extra Options if (rdp->audiomode == 0) { - sprintf(buffer, "-rsound:local"); + sprintf(buffer, "-rsound:local"); + c_argv[c_argc++] = g_strdup (buffer); + } else if (rdp->audiomode == 1) { + sprintf(buffer, "-rsound:remote"); + c_argv[c_argc++] = g_strdup (buffer); + } else { + sprintf(buffer, "-rsound:off"); c_argv[c_argc++] = g_strdup (buffer); - } else if (rdp->audiomode == 1) { - sprintf(buffer, "-rsound:remote"); - c_argv[c_argc++] = g_strdup (buffer); - } else { - sprintf(buffer, "-rsound:off"); - c_argv[c_argc++] = g_strdup (buffer); } /* clipboard feature, rdesktop 1.5 */ sprintf(buffer, "-rclipboard:PRIMARYCLIPBOARD"); c_argv[c_argc++] = g_strdup (buffer); + // disk mapping + if (rdp->diskmapping == 1) { + sprintf(buffer, "-rdisk:Local=/"); + c_argv[c_argc++] = g_strdup (buffer); + } + if (rdp->bitmapcachepersistenable == 1) { sprintf(buffer, "-b"); c_argv[c_argc++] = g_strdup (buffer); @@ -517,11 +523,17 @@ c_argv[c_argc++] = g_strdup (rdp->shell_working_directory); } } - - if (rdp->protocol == 0) { + + // If RDP protocol is asked without disk mapping => protocol 4 + if (rdp->protocol == 0 && rdp->diskmapping == 0) { sprintf (buffer, "-4"); c_argv[c_argc++] = g_strdup (buffer); } + // but if disk mapping is asked => protocol 5 + else { + sprintf (buffer, "-5"); + c_argv[c_argc++] = g_strdup (buffer); + } // do this shit for all modes sprintf(buffer, "%s", (char*)g_strescape(rdp->full_address, NULL)); @@ -1024,6 +1036,7 @@ "Erick Woods <[EMAIL PROTECTED]>", "Kyle Davis <[EMAIL PROTECTED]>", "Jonh Wendell <[EMAIL PROTECTED]>", + "Benoit Poulet <[EMAIL PROTECTED]>", NULL }; const gchar *artists[] = {
<<attachment: harddrive.png>>