This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2gothinclient. commit bcfdb18f124b2dd09facc826b523184a47626395 Author: Mihai Moldovan <ionic@ionic.de> Date: Thu Jan 24 08:45:10 2019 +0100 usbmount/x2gousbmount: remove uni_xlate from ntfs and vfat mounts, add utf8 option to vfat mounts and document this choice. --- debian/changelog | 2 ++ usbmount/x2gousbmount | 54 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6ba6b2d..10c72de 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ x2gothinclient (1.5.0.1-0x2go1) UNRELEASED; urgency=medium * usbmount/x2gousbmount: - Whitespace- and comment-only changes. - Rework x2gothinclientd check. + - Remove uni_xlate from ntfs and vfat mounts, add utf8 option to vfat + mounts and document this choice. [ Stefan Baur ] * New upstream release (1.5.0.1): diff --git a/usbmount/x2gousbmount b/usbmount/x2gousbmount index fca56ee..8eb4939 100755 --- a/usbmount/x2gousbmount +++ b/usbmount/x2gousbmount @@ -157,14 +157,62 @@ if ((check_x2gothinclientmode()) || (-x "/lib/live/config/2900-x2go-thinclientco # mount the USB device # sync is supported by all file systems + # # uid is supported by vfat (via fat),ntfs,hfs,hpfs - # uni_xlate is supported by vfat,ntfs + # + # uni_xlate is supported by vfat and supposed to change "unhandled" + # Unicode characters into escape sequences; otherwise, such + # characters are replaced by a verbatim question mark, triggering + # information loss. Very old versions of ntfs used to "support" this + # option, but historic documents mention that it was broken and + # removed some time in the Linux 2.4 days. + # Character set handling under FAT is complicated to begin with. + # Apparently, 8.3 short file names (which really are the low-level + # and most compatible representation of file names) are always + # encoded with a specific 8-bit codepage - importantly, multi-byte + # encodings are not supported. This specific codepage can either be + # the default one set in the Linux kernel or any other supported one + # selected via the codepage=... mount option. + # Long file names are stored in "Unicode format" according to the + # kernel documentation, which seems to really be raw UCS-2, i.e., + # the raw 2-byte-value of a code point. Consequently, only characters + # in the Basic Multilingual Plane (BMP) can be used in long file + # names and each file is restricted to a character length of at most + # 255, with the additional restriction of at most 256 characters per + # path. This "encoding" could be problematic since code points + # outside of the BMP are being used more and more nowadays, but most + # users should still be fine. + # Typically, systems are not using the UCS-2, but a different + # encoding like UTF-8 or UTF-16. These encodings can handle the full + # Unicode block, also code points after the BMP. Hence, the kernel + # has to perform some kind of conversion from UCS-2 to the desired + # encoding, which again can either be the default one set in the + # kernel or any other supported one set through the iocharset=... + # mount option. + # At that point, things get tricky. (V)FAT is typically a case- + # insensitive file system, which means that lower- and uppercase + # versions of a character should be handled as the same character. + # The Linux kernel developers do not want to store a lower- to + # uppercase mapping for the full Unicode set of characters, though, + # for space and performance reasons. Hence, file systems mounted via + # iocharset=utf8 will be completely case-sensitive. To work around + # that problem, another option called 'utf8' exists, which can be + # used in conjunction with an 8-bit encoding iocharset option. + # Apparently, with such a setup the kernel returns UTF-8-encoded + # data, but internal name mangling operations are carried out in the + # given iocharset encoding. Such a scenario is most useful when + # setting the iocharset parameter to an encoding for which lower- + # and uppercase pairs are defined properly. + # Enabling uni_xlate disables utf8 and is only useful when using + # an iocharset encoding not covering the UCS-2 range. We do not want + # to use this. + # # we must not trigger on iso9660 and udf, or else hybrid USB media # would only cause a mount of the iso9660 raw device, # blocking the mount of individual partitions # real optical media ->x2gocdmanager/x2gothinclient-cdmanager package - if (system("mount -tntfs $dev /media/$name/$ldev -o uid=$user,sync,uni_xlate") == 0) + if (system("mount -tntfs $dev /media/$name/$ldev -o uid=$user,sync") == 0) { syslog('notice', "USB device $name ($ldev) successfully mounted (ntfs detected)"); # if mounted, inform x2goclient about it... @@ -173,7 +221,7 @@ if ((check_x2gothinclientmode()) || (-x "/lib/live/config/2900-x2go-thinclientco print D "export=/media/$name/$ldev\n"; close (D); } - elsif (system("mount -tvfat $dev /media/$name/$ldev -o uid=$user,sync,uni_xlate") == 0) + elsif (system("mount -tvfat $dev /media/$name/$ldev -o uid=$user,sync,utf8") == 0) { syslog('notice', "USB device $name ($ldev) successfully mounted (vfat detected)"); # if mounted, inform x2goclient about it... -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gothinclient.git