applewolf 发表于 2009-8-13 21:56:49

Slax 6.2.0 全中文化全过程(utf8)(二)

接上回咱继续说。。。。。
用这张启动盘启动计算机,然后把启动盘上 /slax/base/001-core.lzm 这个文件拷到 /tmp目录里。
用文件管理器找到它,点右键,选择 Extract Slax Module,把这个模组给解压喽。
编辑 /tmp/001-core/etc/rc.d/rc.local 这个文件
事实上这个文件原配置内容为空,就是说啥都没有,我们来手动加入我们要的配置:
echo Chang vfat32 and vfat16 mounted fs to display Chinese filename with UTF-8 code!
hd_vfat=`fdisk -l | awk '/FAT32/{print $1}'`
hd_vfat16=`fdisk -l | awk '/FAT16/{print $1}'`

i=0
for file in $hd_vfat
   do
      vfat_hd=$file
      let i="$i+1"
   done

j=0
for file in $hd_vfat16
   do
      vfat16_hd=$file
      let j="$j+1"
   done
I=0
while [ $I -lt $i ]
   do
      umount "${vfat_hd[$I]}"
      vfat_mnt=`echo${vfat_hd[$I]} | awk -F/ '{print $3}' `
      mount -t vfat -o iocharset=utf8 "${vfat_hd[$I]}" "/mnt/$vfat_mnt"
      let I="$I+1"
   done
J=0
while [ $J -lt $j ]
   do
      umount "${vfat16_hd[$J]}"
      vfat16_mnt=`echo ${vfat16_hd[$J]} | awk -F/ '{print $3}' `
      mount -t vfat -o iocharset=utf8 "${vfat16_hd[$J]}" "/mnt/$vfat16_mnt"
      let J="$J+1"
   done
然后把这个文件设为可执行(打开终端,chmod 0777 /tmp/001-core/etc/rc.d/rc.local)
也许会有前辈们问我为什么不加入ntfs的配置,关于这点,在slax 6.0.9 以后(以前的版本我不清楚,因为我只从6.0.9开始玩的slax)按我这套配置下来后,NTFS盘(移动硬盘)根本没有任何问题(读写也正常,ntfs-3g在内核文件中已内置了)。
言归正传
进入/tmp/001-core/sbin目录
新建两个文件,一个名叫 mount.vfat, 一个名叫mount.ntfs ,注意大小写,一定要是小写的,文件内容如下:

mount.vfat
#! /bin/sh
/sbin/mount -i -t vfat -o fmask=133,dmask=022 "$@" -o rw,users,exec,suid,umask=0,check=s,codepage=936,utf8,shortname=mixed
mount.ntfs
#! /bin/sh
/sbin/mount.ntfs-3g-o fmask=133,dmask=022 "$@" -o rw,users,suid,dev,exec,locale=zh_CN.utf8,codepage=936,nls=utf8
补充一下,把这两个文件给设成可执行:chmod 0777 /tmp/001-core/sbin/mount.vfat
chmod 0777 /tmp/001-core/sbin/mount.ntfs接下来还有一个工作要做,到 /tmp/001-core/usr/share/locale 目录里,把 locale.alias 文件给删了,对,没错,删了!(Slax 的一个重要的原则,文件尽最大可能不要重复,这个文件与我们改的启动文件中的locale.alias文件重复了,如果locale.alias 文件放在这里,启动时你会收到 cat locale.alias文件找不到的错误,放到启动文件中去就没这个错误了)

找到 /tmp/001-core/etc/profile.d/ 目录下的lang.csh 和 lang.sh 两个文件,进行如下修改:
lang.csh把 setenv LANG 后面改成 zh_CN.utf8
把 setenv LC_COLLATE 后面改成 zh_CN.utf8lang.sh把export LC_ALL= 后面改成 zh_CN.utf8
把export LANG= 后面改成 zh_CN.utf8然后再从文件管理器中找到/tmp/001-core目录,对着它点右键,选 "Build Slax Module",重新生成新的内核文件,得到新的 001-core.lzm,用这个文件把启动盘上 /slax/base/001-core.lzm这个文件给替换掉。

再用这个盘启动计算机,还是英文界面,没错,但是别急,因为X的管理不在这里,这里是底层的中文编码支持配置,正式的中文化是从 xorg 开始的。。。。。。。。

呵呵,这文章是我 AppleWolf 原创的,即兴写的。。。。。。。

[ 本帖最后由 applewolf 于 2009-8-14 04:45 编辑 ]

minileaf 发表于 2009-10-8 14:17:39

写得如此详细的好文,为什么这么久了,我还是第一个跟帖的人?感谢lz

蝌蚪 发表于 2009-10-26 11:14:32

继续学习,谢谢楼主的奉献。:lol:

felonwan 发表于 2009-11-6 22:00:21

回复 1# applewolf 的帖子

很感谢楼主的很详细的步骤。

不过缺少了一点条理。每一部分究竟是干什么的?
让我这个新手看得很糊涂。

直接在slax的官网上下载了Chinese.fcitx6.lzm和Zh_English_KDE.lzm,挂载之后,fcitx不能用,另外要把字体重新设置为WenQuanYi Bitmap Song,不知道该怎么解决?

felonwan 发表于 2009-11-6 22:52:47

回复 1# applewolf 的帖子

再次感谢AppleWpe,从slax官网上下载了他的所有.lzm包,很轻松搞定了中文化。

mount那个是挂载分区的是明白的,可是这个core的到底是什么“底层”的中文配置呢?

[ 本帖最后由 felonwan 于 2009-11-6 23:10 编辑 ]

applewolf 发表于 2009-11-11 01:41:11

原帖由 felonwan 于 2009-11-6 22:52 发表 http://www.linuxfans.org/bbs/images/common/back.gif
再次感谢AppleWpe,从slax官网上下载了他的所有.lzm包,很轻松搞定了中文化。

mount那个是挂载分区的是明白的,可是这个core的到底是什么“底层”的中文配置呢? ...

呵呵,这个怎么说呢,如果试着编译一次 Slax 的内核,可能你会更明白一点,不管说不说得清了,我来说一下它的基本构成吧。

core 英文本意就是 核 的意思。而linux 内核是连接硬件平台与软件平台的中间介质。

我觉得 Tomas M 在这方面做得非常棒,他在处理内核时,把95%以上的内核驱动给M掉了,M掉就是指外挂化了,这样,内核文件本身体积就比较小,而且允许用户自己弹入新的外挂驱动。那么,这些驱动到哪儿去了?!
呵呵,不用我说,你也知道,在CORE这个文件中,你一定会问,CORE为什么这么大,驱动有这么多吗?!

其实,正常编译好内核后,总容量也就二十M不到一点,也就是说,CORE中不仅仅是内核的外挂驱动,Tomas M 还把基本系统运行库和一些C之类的编译工具给放进去了。至于究竟放了哪些东东,我记得我在官网论坛上看到过一篇贴子,就是每个包的列表,这个你可以找一下。

那么现在来说这个“底层”的问题。呵呵,这是我对它的定义,并不是官方的,之所以这样定义它,主要是它的内容构成,驱动,系统基本库,相对于SLAX 桌面系统来说,这些是Slax 系统包中的最最底层的包了。呵呵,所以我给它寇了个“底层”。

这个底层的中文配置其实是我自己对它的称呼,并不是什么特别的原因,主要是 Tomas M 把我们需要进行中文化修改的某些配置文件放到了这个包里,所以,我把这一步的修改称之为底层配置,我并不想大动系统,我的原则是尽可以一切维持原样,原汁原味化。

哈哈哈,请别介意,但这确确实实是我自己对它的定义。
:-D :-D :-D

wsfy008 发表于 2009-11-15 09:17:35

继续学习!

gfdice 发表于 2010-7-30 10:05:35

理解和另外的方式:
applewolf添加的rc.conf就是把已经挂在的所有fat分区卸下来重新使用utf8挂载。恩,如果initrd.gz如我上一个帖子中设置好了的话,这个没必要了,applewolf只是想上个保险。
然后mount.vfat和mount.ntfs也是没有必要添加的,applewolf还是想上个保险。
lang.csh估计是用csh登录的时候设置locale的,这个一般不会用到,别管它了;lang.sh在开机的时候则一般会被执行,也是用来设置locale的,仔细看看着lang.sh,里面其实就是调用liblinuxlive中的locale_id来获取locale,如果获取不到才会变长en_US之类
所以呢,applewolf说的这些呢,都不必设置或者添加。
我的修改呢,因为core.lzm里也有个liblinuxlive,所以,请参考我上一个跟帖修改它。
这样基本都不会有问题了,截止今天(看发帖日期),slax官网上明确的下载链接仍是6.1.2,里面的ntfs-3g比较老了,使用它挂载需要指定locale参数(applewolf的mount.ntfs就是这么干的),而新版的ntfs-3g已经去掉了locale参数,也就是除了性能改进之外,它不再依赖于locale来挂载,他会把所有“乱码”按照utf8翻译过来——也就是说,使用新版的ntfs-3g吧,不需要任何配置,带汉字的文件都会出来了。
下载源码,编译,然后把编译出来的东西中的头文件(include目录)和静态库(.a)都去掉,剩下的都是会用到的(没几个文件了);我编译的时候出来的文件比较大,里面还带着调试信息,所以把这些个可执行文件和动态库(so文件)都用strip过一遍减减肥(不明白就跳过这一步),往core里覆盖就行。

cora1226 发表于 2011-1-13 09:35:11

:shock: 安装在硬盘上,找不到/slax/base/001-core.lzm这个替换文件
页: [1]
查看完整版本: Slax 6.2.0 全中文化全过程(utf8)(二)