Linux 下使用 Wine 安装运行 TM2008 Beta 及乱码、与 Windows 共享聊天记录等相关问题的解决
December 8th, 2008
前言
腾讯已经发布了官方的 QQ for Linux,虽然有很多问题,例如没有 amd64 版本,功能太弱,聊天记录格式与 Windows 下的 QQ/TM 格式不一致等等,但无疑是 Linux 里使用 QQ/TM 最简单的方案。如果它已经能满足你的需求了,那么不必浪费时间看本文。
精简版本
如果你没时间看我唠叨,精简的版本是:TM2008 Beta 运行需要 Unicode 版本的 IE6、rpcrt4.dll、Visual C++ 2005 SP1 运行库,安装程序需要 GDI+。不可以使用 IEs4Linux,因为它安装的 IE6 及相关运行库是 Win9x 的 ANSI 版本。必须使用 CrossOver Games 里的 rpcrt4.dll,然后用 winetricks 安装 msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1 即可安装运行 TM2008 Beta。
详细版本
只看精简版没搞定?请看详细的(唠叨的)版本:
安装 Wine,运行一下 winecfg,让它生成一个干净的 ~/.wine 目录。如果要使用已有的 ~/.wine,请先将其备份。同时确保 winecfg 里设置的 Windows 版本至少是 Windows 2000(我用的是 Wine 1.x 默认的 Windows XP)。
获取一份 CrossOver Games 里的 rpcrt4.dll,将其复制为 ~/.wine/drive_c/windows/system32/rpcrt4.dll(覆盖已有的文件),运行 winecfg,在 Libraries -> DLL Overrides 里将 rpcrt4 设置为 Native (Windows)。
下载 winetricks,使用它安装 IE6 和一些重要的运行库。如果这个过程失败,删除 ~/.wine(或者恢复备份的 ~/.wine)并从头再来。
sh winetricks msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1
此时如果你有 Windows 上安装好的 TM2008,它已经可以运行了,但是无法登录,会提示“网络连接失败,请检查网络。”。所以还是老老实实用安装程序装一次吧。这里有个很莫名的问题,如果直接使用 Wine 运行 TM2008 安装程序,它很可能会直接崩溃,看不到任何图形界面的提示。而使用 Wine 运行一个其它的程序,例如 cmd.exe 或者 Total Commander,再用这个程序去启动 TM2008 安装程序则不会有任何问题。
中文乱码(空心方框)问题
好吧,终于看到 TM2008 的安装界面了,不过很可能你又会头大了——所有的中文全是空心方框。原因是安装程序界面的字体是被指定为 Tahoma 的,而实际上 Tahoma 字体并不包括中文字符。有两个办法解决,都是 Windows 的技术,把 Tahoma 字体替换成某个中文字体,或者把某个中文字体链接到 Tahoma 上。照这两个片段修改 ~/.wine/system.reg,只需要其中一个。别忘了把中文字体名改成你自己需要的。
[Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"MS Shell Dlg"="Microsoft YaHei"
"MS Shell Dlg 2"="Microsoft YaHei"
"Tahoma"="Microsoft YaHei"
[Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Tahoma"=str(7):"SimSun.TTC,SimSun\0"
最后还必须把你改的中文字体文件符号链接到 ~/.wine/drive_c/windows/Fonts 目录下,不这么做其它软件都没问题,就 QQ 或 TM 会乱码,该死的硬编码。
查看聊天记录时的性能问题
好了,现在不会有什么问题阻挡你了,TM2008 Beta 安装和启动都非常顺利,使用也很稳定。甚至 QQ2009 Preview4 都可以安装并启动,不过使用时很容易崩溃。但是如果你像我这样疯狂地保存了七八年的聊天记录,你会发现:
- 每次启动 TM2008 后第一次给任何人发消息都会导致 TM2008 失去响应将近 20 秒钟,之后继续发消息则不会有问题。第一次接收到某人的消息也会同样如此。
- 任何试图查看聊天记录的操作都会导致 TM2008 消耗 100% CPU 并且很长时间没有反应,等待足够长的时间后才可以看到聊天记录。
这是由于 TM2008 的聊天记录数据库使用了 Windows 的 Structured Storage 技术,而其 API 库 ole32.dll 的 Wine 实现还不完善或者可能性能太低。虽然可以用 winetricks 安装 dcom98 来获取一个 Win9x 的 ANSI 版本的 ole32.dll,但它没法让 Unicode 版本的 TM2008 运行起来。搜遍了网络也找不到在 Wine 里使用 Win2k 以上系统的 ole32.dll 的方法。没办法,为了保持聊天记录的一致性,只有两个选择。要么不在 Linux 里看聊天记录;要么把聊天记录数据库 Msg2.0.db 备份并从 QQ Profile 目录(我的文档\QQ Files\QQ 号码)里删除,让 TM2008 自己生成一个空白的 Msg2.0.db,暂时抛弃历史包袱,以后再到 Windows 下把新的记录导出为备份文件后合并到老的数据库里。
与 Windows 共享聊天记录
如果你还像我这样偶尔会切换到 Windows,希望跟 Windows 下的 TM2008 共享聊天记录数据库,那么有两个办法:
- 直接在 Linux 里使用 ntfs-3g 读写存放 TM2008 聊天记录的 NTFS 分区。虽然 ntfs-3g 已经号称非常稳定可靠了,但对于聊天记录这种极度个人化的数据我还是宁可保守一些。
- 创建一个 ext2 分区用来和 Windows 共享数据,在 Windows 下可以用 Ext2 IFS 驱动来访问它。比起私有文件系统 NTFS 的 Linux 版开源驱动来说,当然是开源的 ext2 文件系统的 Windows 版驱动更值得信赖。
用这两种办法都需要在 Linux 和 Windows 里创建 QQ Files 目录的符号链接,Linux 里不必说,ln -s 即可。Windows Vista 以前的版本可以用 Junction 来创建 NTFS 上的符号链接,Windows Vista 可以用自带的 MKLINK。
对于我这种非笔记本用户来说使用日志文件系统来抵御意外断电是必须的。按照 Ext2 IFS 的 FAQ,它也可以读写 ext3 分区。不过比较新的 Linux 发行版的 mkfs.ext3 创建的 ext3 分区 Ext2 IFS 是无法访问的,可能是 ext3 文件系统格式发生了变化。而 Windows 下一些分区工具如 Paragon Partition Manager 或 Acronis Disk Director 创建的 ext3 分区则没有问题。比较新的 Linux 发行版的 mkfs.ext3 默认创建的 ext3 分区 inode 大小是 256 字节,Ext2 IFS 不支持这样的 ext3 分区,使用 mkfs.ext3 -I 128 即可创建 inode 大小为 128 字节的能被 Ext2 IFS 支持的 ext3 分区。不建议使用 Paragon Partition Manager 等 Windows 下的工具创建 ext3 分区,至少 PPM 创建的 ext3 分区是没有目录 hash 的。Ext2fsd 支持 inode 大小为 256 字节的 ext3 分区,不过虽然相对 Ext2 IFS 它有 GPL 的优势,但似乎成熟度比 Ext2 IFS 低,而且我试用的感觉并不太好,所以没有选择它。
参考资料
标签:GNU/Linux, QQ, Software_软件, TM2008, Windows, Wine一些符合我的 Firefox 浏览习惯的 Opera 配置
October 20th, 2008
Ctrl + 左键单击在后台打开新标签
打开首选项 -> 高级 -> 内容 -> JavaScript 选项,为“用户 JavaScript 文件”指定一个目录,然后从 这个帖子 里(需要穿墙)下载 allinbackground.js (本地镜像,无须穿墙)放到指定的目录,无需重启 Opera 即可生效。对于使用 https 的站点,在地址栏输入 opera:config,搜索“User JavaScript”,勾选“User JavaScript on HTTPS”(请自行确保你的 User JavaScript 都是无公害的)。
Shift + Enter 和 Ctrl + Shift + Enter 自动补全 .net 和 .org 网址
打开首选项 -> 高级 -> 快捷键,如果你以前修改过键盘快捷键,双击“Opera Standard (已修改)”,否则双击“Opera Standard”,定位到 Advanced -> Address Dropdown Widget。这里可以看到 “Enter ctrl” 对应的操作是 “Autocomplete server name, “http://www”, “com””,所以你要做的就是新建两个项目,分别设置快捷键为“Enter shift”和“Enter ctrl shift”,操作为“Autocomplete server name, "http://www", "net"”和 “Autocomplete server name, "http://www", "org"”。
搜索时自动打开新标签
打开首选项 -> 高级 -> 标签页,去掉勾选“重用当前标签页”。这里还可以顺便把“在使用 Ctrl + Tab 循环浏览标签页时”设置为“不显示列表循环”,以及勾选“在当前标签页旁边打开新标签”和“关闭标签页时”“激活下一个标签页”。
标签:Browser, Opera, Software_软件做了 MBTI 职业性格测试
September 12th, 2008
无意中从某人 blog 上看到这个权威的 MBTI 职业性格测试,做了一下,确实比较准确。看来我少年时的职业选择从理论上讲也是非常正确的 :D
标签:Personal_个人Psytopic分析:您的性格类型是“ISTP”(内向+实感+思维+知觉)
容忍,有弹性;是冷静的观察者,但当有问题出现,便迅速行动,找出可行的解决方法。能够分析哪些东西可以使事情进行顺利,又能够从大量资料中,找出实际问题的重心。很重视事件的前因后果,能够以理性的原则把事实组织起来,重视效率。
ISTP型的人坦率、诚实、讲求实效,他们喜欢行动而非漫谈。他们很谦逊,对于完成工作的方法有很好的理解力。 ISTP型的人擅长分析,所以他们对客观含蓄的原则很有兴趣。他们对于技巧性的事物有天生的理解力,通常精于使用工具和进行手工劳动。他们往往做出有条理而保密的决定。他们仅仅是按照自己所看到的、有条理而直接地陈述事实。 ISTP型的人好奇心强,而且善于观察,只有理性、可靠的事实才能使他们信服。他们重视事实,简直就是有关他们知之甚深的知识的宝库。他们是现实主义者,所以能够很好地利用可获得的资源,同时他们擅于把握时机,这使他们变得很讲求实效。ISTP型的人平和而寡言,往往显得冷酷而清高,而且容易害羞,除了是与好朋友在一起时。他们平等、公正。他们往往受冲动的驱使,对于即刻的挑战和问题具有相当的适应性和反应能力。因为他们喜欢行动和兴奋的事情,所以他们乐于户外活动和运动。
您适合的领域有:技术领域 证券、金融业、贸易、商业领域 户外、运动、艺术等
您适合的职业有:
· 信息服务业经理
· 计算机程序员
· 警官
· 软件开发员
· 律师助理
· 消防员
· 私人侦探
· 药剂师
· 证券分析员
· 银行职员
· 管理顾问
· 财务顾问
· 电子专业人士
· 技术培训人员
· 信息服务开发人员
· 软件开发商
· 海洋生物学者
· 后勤与供应经理
· 经济学者
· 贸易商
· 商品经销商
· 产品代理商(有形产品)
· 警察
· 侦探
· 体育工作者
· 赛车手
· 飞行员
· 雕塑家
· 手工制作
· 画家
基于公钥认证方式的 OpenSSH Server 自动登录完全手册(Linux/Windows 下的 SSH 自动登录指南)
September 2nd, 2008
概述
假设要以用户 rainux 的身份登录运行 OpenSSH Server 的远程主机 www.rainux.org(现在几乎所有的 Linux 服务器都使用 OpenSSH Server 作为 SSH Server),那么需要做的操作如下:
生成用于 SSH 身份认证的密钥。密钥由公钥和私钥组成,一个公钥只对应一个私钥,一个私钥也只对应一个公钥。
将 OpenSSH 格式的公钥文本追加到远程主机上的
~rainux/.ssh/authorized_keys文件里(~rainux意为用户 rainux 的 HOME 目录)。注意公钥文本中应该没有换行符,一行就是一个公钥。确保
~rainux/.ssh/authorized_keys权限为 600,~/rainux/.ssh目录权限为 700,并且它们的所有者都是 rainux。指定 SSH 客户端使用对应的私钥并以用户 rainux 的身份登录 www.rainux.org,此时无需输入 rainux 在 www.rainux.org 上的密码。
注意,如果私钥是以加密形式存储的(强烈建议使用一个强壮的密码加密私钥,这样即使私钥文件被窃取,也无法被直接使用),第四步仍然需要输入加密私钥所用的密码。但是 PuTTY 和 OpenSSH 都有提供一个代理程序用于避免多次重复输入密码。运行代理程序后将私钥添加到其中,并且输入一次加密私钥所用的密码,然后保持代理程序的运行,以后 SSH 客户端即可在需要使用私钥进行身份认证的场合请求代理程序去完成身份认证(这是为了确保私钥不会被泄漏到任何使用代理程序的客户端上),无须再次输入任何密码。
Linux / Cygwin / MSYS 上使用 OpenSSH Client
生成密钥
执行 ssh-keygen 接受默认文件名,并且输入加密私钥用的密码(passphrase)即可生成私钥 ~/.ssh/id_rsa 和对应的公钥 ~/.ssh/id_rsa.pub。其中 id_rsa.pub 的内容可以直接追加到远程主机的 authorized_keys 文件里。
使用私钥
把公钥部署到远程主机上后,即可直接执行 ssh rainux@www.rainux.org 来登录远程主机。但如果私钥是加密形式保存,如上所述应该使用代理程序 ssh-agent 来避免每次输入密码。
直接执行 ssh-add 命令可以添加刚才生成的私钥到 ssh-agent 里,也可以用 ssh-add -l 查看已经添加的私钥。如果执行 ssh-add 时提示无法连接身份认证代理,则需要使用以下命令来启动 ssh-agent。
eval `ssh-agent`
使用 eval 是为了执行 ssh-agent 输出的设置环境变量的 bash 命令,以确保 ssh-add 可以通过 SSH_AUTH_SOCK 环境变量找到 ssh-agent。
GNOME 的桌面系统如果有安装 gnome-keyring,它会自动管理 ssh-agent,通常甚至无须手工添加私钥到 ssh-agent 里,第一次使用公钥时 gnome-keyring 就会提示输入一次密码,以后则不再需要。
Windows 上使用 PuTTY
生成密钥
到 PuTTY 的下载页面下载 putty-0.60-installer.exe 或者 putty.zip,两者都包含 PuTTY 所有的组件。
安装好 PuTTY 之后(对于 zip 版本来说,解压到任意目录即可)运行 PuTTYGen 生成自己的密钥。选择密钥类型为 SSH-2 RSA,点击 Generate,按照提示在 PuTTYGen 窗口内随机移动鼠标直到进度条达到 100%,然后 PuTYYGen 会生成密钥并且显示其公钥部分信息。这里可以填写一个有意义的注释,然后输入一个用来加密私钥的强壮的密码(Key passphrase)。最后点击 Save private key 将私钥保存为一个 .ppk 文件。不需要单独 Save public key,因为 .ppk 文件里已经包含了公钥。并且通过 Save public key 保存出来的公钥文件格式与 OpenSSH 的格式并不相同,若要将公钥部署到使用 OpenSSH Server 的服务器上,只能使用 PuTTYGen 窗口上显示的那一段 Public key for pasting into OpenSSH authorized_keys file。
使用私钥
将公钥部署到远程主机上之后,使用 PuTTY 登录该远程主机时可以在 Connection > SSH > Auth 里选择用于身份认证的私钥文件。同样,如果私钥是加密形式保存,应该使用代理程序 Pageant 以避免每次输入密码。
最简单的办法是创建一个 Pageant 的快捷方式,并且将 .ppk 私钥文件作为参数加到快捷方式的“目标”栏里,添加之后看上去应该像这样:
C:\PuTTY\pageant.exe D:\main.ppk "D:\My Secrets\secondary.ppk"
就像上面的例子一样,如果私钥文件路径中带有空格,应该使用引号将其括起来。通过这个快捷方式启动 Pageant 则会自动装载指定的私钥文件,并且立即询问用于加密私钥的密码。以后只要保持 Pageant 的运行,并且在 PuTTY 的某个 Saved session 里设置 Connnection > Data 里设置 Auto-login username,即可实现双击该 session 则完全自动登录。
标签:GNU/Linux, Software_软件, Windows解决 ssh 创建连接极慢的问题
June 18th, 2008
做 Web 开发的工作经常需要 ssh 或者 scp 连接一堆远程主机,同样是 Linux 主机,其中一些创建 ssh 连接速度特别慢,连接建立之后执行操作速度却很正常,看来应该不是网络原因。
Google 了一下,这位老兄也遇到类似的问题,看完他描述的问题才知道可以用 ssh -v 来查看详细的连接建立过程,马上用一台建立连接很慢的主机试了一下,在一大堆输出信息中发现在这里停留最久:
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No credentials cache found
debug1: Unspecified GSS failure. Minor code may provide more information
No credentials cache found
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Next authentication method: publickey
原来是因为尝试了个没有意义而且会失败的 gssapi-with-mic 认证方式浪费了时间,打开 /etc/ssh/ssh_config 把里面的 GSSAPIAuthentication yes 改成 no 关掉它,即可让 ssh 直接尝试美妙的 publickey 认证方式。
禁用 GSSAPIAuthentication 前后建立 ssh 连接时间的对比:
rainux@mutalisk:~$ time ssh root@i-will-not-tell-you.com exit real 0m18.488s user 0m0.004s sys 0m0.008s rainux@mutalisk:~$ time ssh root@i-will-not-tell-you.com exit real 0m3.531s user 0m0.016s sys 0m0.000s标签:GNU/Linux, Software_软件, ssh