Решил (грязным хаком) проблему неправильных iocharset & codepage при монтировании носителей с vfat (флешек и проч.) из-под XFCE.
Как показало изучение документации пациента, XFCE пошло курсом KDE, и вместо pmount пользуется собственным exo-mount, при этом последний не имеет каких-либо настроек. Поэтому проблема была просто — в exo-mount был добавлен код прописывающий для vfat iocharset=utf8, codepage=866 и, до кучи, noatime. Заплатка присоединена.
diff -urN exo-0.3.4~/exo-mount/exo-mount-hal.c exo-0.3.4/exo-mount/exo-mount-hal.c --- exo-0.3.4~/exo-mount/exo-mount-hal.c 2007-12-02 13:33:44.000000000 +0200 +++ exo-0.3.4/exo-mount/exo-mount-hal.c 2008-07-17 13:57:10.734375000 +0300 @@ -662,7 +662,7 @@ else if (strcmp (device->fsoptions[m], "shortname=") == 0 && strcmp (device->fstype, "vfat") == 0) { - options[n++] = g_strdup_printf ("shortname=winnt"); + options[n++] = g_strdup ("shortname=winnt"); } else if (strcmp (device->fsoptions[m], "sync") == 0 && device->volume == NULL) @@ -676,6 +676,26 @@ /* however this one is FreeBSD specific */ options[n++] = g_strdup ("longnames"); } + /* + very ugly hack to add support for mount options `noatime', + `iocharset=utf8' and `codepage=866' + */ + /* for any filesystem */ + else if (strcmp (device->fsoptions[m], "noatime") == 0) + { + options[n++] = g_strdup ("noatime"); + } + /* for vfat only */ + else if (strcmp (device->fsoptions[m], "iocharset=") == 0 + && strcmp (device->fstype, "vfat") == 0) + { + options[n++] = g_strdup ("iocharset=utf8"); + } + else if (strcmp (device->fsoptions[m], "codepage=") == 0 + && strcmp (device->fstype, "vfat") == 0) + { + options[n++] = g_strdup ("codepage=866"); + } } }