Re: Etch & usb flash
Посмотрел приведенные конфиги, у меня все это не работает. Заглянул в
исходники hal-0.5.8.1, нашел единственный способ указать параметр iocharset -
вызывающее приложение может его передать через stdin. Из конфига он вообще не
читается. Отсюда два пути решения - вписать код, который будет читать из
конфига или в коде указать отдельные параметры для монтирования vfat. Я пошел
по второму пути. Моя системная кодировка cp1251 (define
MOUNT_OPTIONS_VFAT "noexec,nosuid,iocharset=cp1251"). Теперь кодировка
правильно выставляется для флэшек и усб-винтов. Если кому нужно, могу
прислать пересобранный hal-storage-mount или hal_0.5.8.1-4_i386.deb. В syslog
теперь пишутся параметры монтирования всех устройств, так оно поприятнее
отлаживать.
Через конфиг отключим параметр utf8 (иначе iocharset будет проигнорирован).
Параметр dmask= отключил, чтобы примонтированный винт сразу же был доступен
на запись.
/etc/hal/fdi/policy/01-charset.fdi
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="volume.fstype" string="vfat">
<remove key="volume.mount.valid_options" type="strlist">utf8</remove>
<remove key="volume.mount.valid_options" type="strlist">fmask</remove>
<remove key="volume.mount.valid_options" type="strlist">dmask=</remove>
</match>
</device>
</deviceinfo>
Пропатчим hal.
--- hal-0.5.8/tools/hal-storage-mount.c 2006-09-20 00:23:25.000000000 +0400
+++ hal-0.5.8/tools/hal-storage-mount.c 2006-12-20 09:27:53.000000000 +0300
@@ -60,13 +60,16 @@
#ifdef __FreeBSD__
#define MOUNT "/sbin/mount"
#define MOUNT_OPTIONS "noexec,nosuid"
+#define MOUNT_OPTIONS_VFAT "noexec,nosuid,iocharset=cp1251"
#define MOUNT_TYPE_OPT "-t"
#elif sun
#define MOUNT "/sbin/mount"
#define MOUNT_OPTIONS "noexec,nosuid"
+#define MOUNT_OPTIONS_VFAT "noexec,nosuid,iocharset=cp1251"
#define MOUNT_TYPE_OPT "-F"
#else
#define MOUNT "/bin/mount"
#define MOUNT_OPTIONS "noexec,nosuid,nodev"
+#define MOUNT_OPTIONS_VFAT "noexec,nosuid,nodev,iocharset=cp1251"
#define MOUNT_TYPE_OPT "-t"
#endif
--- hal-0.5.8/tools/hal-storage-mount.c 2006-09-20 00:23:25.000000000 +0400
+++ hal-0.5.8/tools/hal-storage-mount.c 2006-12-20 09:27:53.000000000 +0300
@@ -820,6 +820,17 @@
args[na++] = "-o";
mount_option_str = g_string_new (MOUNT_OPTIONS);
+ mount_option_str = g_string_new (MOUNT_OPTIONS_VFAT);
+ if (strlen (mount_fstype) > 0)
+ {
+ if (strcmp (mount_fstype, "vfat") != 0)
+ mount_option_str = g_string_new (MOUNT_OPTIONS);
+ }
+ else
+ {
+ if (libhal_volume_get_fstype (volume) != NULL && strcmp
(libhal_volume_get_fstype (volume), "vfat") != 0)
+ mount_option_str = g_string_new (MOUNT_OPTIONS);
+ }
for (i = 0; given_options[i] != NULL; i++) {
g_string_append (mount_option_str, ",");
g_string_append (mount_option_str, given_options[i]);
--- hal-0.5.8/tools/hal-storage-mount.c 2006-09-20 00:23:25.000000000 +0400
+++ hal-0.5.8/tools/hal-storage-mount.c 2006-12-20 09:27:53.000000000 +0300
@@ -910,6 +910,9 @@
if (fwrite (hal_mtab_buf, 1, strlen (hal_mtab_buf),
hal_mtab) != strlen (hal_mtab_buf)) {
unknown_error ("Cannot write to /media/.hal-mtab~");
}
+ openlog ("hald", 0, LOG_DAEMON);
+ syslog (LOG_INFO, "=write to /media/.hal-mtab~ line '%s'=",
hal_mtab_buf);
+ closelog ();
fclose (hal_mtab);
g_free (hal_mtab_buf);
g_free (mount_dir_escaped);
Reply to: