[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: