<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iPUNKID &#187; Linux</title>
	<atom:link href="http://blog.punkid.org/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.punkid.org</link>
	<description>To ∞ and Beyond</description>
	<lastBuildDate>Sun, 29 Jan 2012 13:02:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>打造基于Ubuntu+XBMC的家庭媒体中心</title>
		<link>http://blog.punkid.org/2011/04/03/build-home-media-center-on-an-ubuntu-system-with-xbmc/</link>
		<comments>http://blog.punkid.org/2011/04/03/build-home-media-center-on-an-ubuntu-system-with-xbmc/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 11:44:50 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[HTPC]]></category>
		<category><![CDATA[Ion]]></category>
		<category><![CDATA[Revo-3700]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=371</guid>
		<description><![CDATA[作为一名高清爱好者，一直想配置一台HTPC放家里实现高清播放外加家庭服务器功能。Nvidia的Ion平台自然是高清平台的硬件首选，而家庭媒体中心的软件端则首先考虑开发的已经很成熟的开源利器XBMC。XBMC本身支持多种平台（Linux, Mac OS X, Windows &#8230;），从驱动程序和配置方面来说，自然是基于Windows搭建最省事，但最终选择Linux的原因是：ssh。Linux的ssh让我可以很方便地通过其他电脑，甚至手机操作我的家庭媒体中心主机。 因此，我最终在硬件上选择了Acer Aspire R3700，基于Ion平台的超小型主机，配置如下： CPU：Intel Atom™ D525 内存：2G DDR3 800Mhz 硬盘：320G Sata 显卡：Nvidia G320 网络：WLAN 802.11b/g/n 接口：USB接口6个、HDMI输出、多合一读卡槽 &#8230; 除了买的主机自带了鼠标键盘之外，我还选购了HDMI高清线以及MCE遥控器。 系统方面选择了安装配置简便的Ubuntu 10.10系统（我开始是打算使用Gentoo的，但是编译着编译着我就崩溃鸟）。使用Ubuntu要实现的功能如下： 实现XBMC完全管理影音库，并通过HDMI输出到家里46吋的电视机 通过无线网络连接家庭路由器，尽量摆脱网线的束缚 开启sshd，通过其他电脑或者手机ssh到家庭媒体主机进行系统维护操作 开启transmission-daemon，利用该主机进行高清下载，并可远程控制Bittorrent下载 实现开机自动进入媒体中心，用遥控器进行媒体播放操作，避免使用键鼠的可能 系统安装 因为Acer Aspire R3700本身不内置光驱，安装系统可以通过制作LiveUSB进行U盘引导安装。我制作了LiveUSB到一张SD卡上，直接放入机器的内置读卡器进行引导安装的。具体如何制作LiveUSB以及安装Ubuntu系统就不冗述了，可参考Ubuntu的LiveUSB制作教程：Installation From USB Stick Quick。 注：我在系统设置时添加了一个名为xbmc的普通账户，系统主机名为HAL。下文均使用此用户名和主机名代替。 分区上我新建了一个220G的空白分区挂载在/library目录下，用于存放高清电影文件，文件格式上采用了xfs，采用如下命令进行格式化： sudo mkfs.xfs -l size=64m -d agcount=4 -i attr=2,maxpct=5 -L library /dev/sdx 在/etc/fstab中添加/library分区挂载行： /dev/sdb5 /library [...]]]></description>
			<content:encoded><![CDATA[<p>作为一名高清爱好者，一直想配置一台HTPC放家里实现高清播放外加家庭服务器功能。Nvidia的Ion平台自然是高清平台的硬件首选，而家庭媒体中心的软件端则首先考虑开发的已经很成熟的开源利器<a href="http://xbmc.org/" title="XBMC">XBMC</a>。XBMC本身支持多种平台（Linux, Mac OS X, Windows &#8230;），从驱动程序和配置方面来说，自然是基于Windows搭建最省事，但最终选择Linux的原因是：<strong>ssh</strong>。Linux的ssh让我可以很方便地通过其他电脑，甚至手机操作我的家庭媒体中心主机。</p>
<p>因此，我最终在硬件上选择了Acer Aspire R3700，基于Ion平台的超小型主机，配置如下：</p>
<ul>
<li>CPU：Intel Atom™ D525</li>
<li>内存：2G DDR3 800Mhz</li>
<li>硬盘：320G Sata</li>
<li>显卡：Nvidia G320</li>
<li>网络：WLAN 802.11b/g/n</li>
<li>接口：USB接口6个、HDMI输出、多合一读卡槽</li>
<li>&#8230;</li>
</ul>
<p>除了买的主机自带了鼠标键盘之外，我还选购了HDMI高清线以及MCE遥控器。</p>
<p>系统方面选择了安装配置简便的Ubuntu 10.10系统（我开始是打算使用Gentoo的，但是编译着编译着我就崩溃鸟）。使用Ubuntu要实现的功能如下：</p>
<ol>
<li>实现XBMC完全管理影音库，并通过HDMI输出到家里46吋的电视机</li>
<li>通过无线网络连接家庭路由器，尽量摆脱网线的束缚</li>
<li>开启sshd，通过其他电脑或者手机ssh到家庭媒体主机进行系统维护操作</li>
<li>开启transmission-daemon，利用该主机进行高清下载，并可远程控制Bittorrent下载</li>
<li>实现开机自动进入媒体中心，用遥控器进行媒体播放操作，避免使用键鼠的可能</li>
</ol>
<p><span id="more-371"></span></p>
<h3>系统安装</h3>
<p>因为Acer Aspire R3700本身不内置光驱，安装系统可以通过制作LiveUSB进行U盘引导安装。我制作了LiveUSB到一张SD卡上，直接放入机器的内置读卡器进行引导安装的。具体如何制作LiveUSB以及安装Ubuntu系统就不冗述了，可参考Ubuntu的LiveUSB制作教程：<a href="https://help.ubuntu.com/community/Installation/FromUSBStickQuick" title="Installation From USB Stick Quick">Installation From USB Stick Quick</a>。</p>
<p>注：我在系统设置时添加了一个名为xbmc的普通账户，系统主机名为HAL。下文均使用此用户名和主机名代替。</p>
<p>分区上我新建了一个220G的空白分区挂载在<code>/library</code>目录下，用于存放高清电影文件，文件格式上采用了xfs，采用如下命令进行格式化：</p>
<pre lang="bash">
sudo mkfs.xfs -l size=64m -d agcount=4 -i attr=2,maxpct=5 -L library /dev/sdx
</pre>
<p>在<code>/etc/fstab</code>中添加<code>/library</code>分区挂载行：</p>
<pre lang="bash">
/dev/sdb5	/library	xfs	noatime,nodiratime,allocsize=512m	0	2
</pre>
<p>其中<code>allocsize=512m</code>的作用是每次写入文件时xfs分区会预先分配512Mb的空间供一次写入，以减少文件碎片。对于动辄数G的高清文件来说，512Mb不算大支。</p>
<h3>系统调试</h3>
<h4>删除冗余组件</h4>
<p>安装好系统之后首先运行<code>sudo apt-get update</code>更新源。然后删除一些不必要的自带软件，如Openoffice, Evolution Mail, Brasero等。具体看个人需要删除，例如要删除Openoffice，运行<code>sudo apt-get autoclean openoffice.org</code>进行完全清理。</p>
<h4>解决RaLink RT3090网卡驱动问题</h4>
<p>Ubuntu 10.10自带的无线网卡RaLink RT3090驱动存在不能正常关机的问题，需要安装第三方源的编译包，运行如下命令：</p>
<pre lang="bash">
## 添加第三方驱动源
sudo add-apt-repository ppa:markus-tisoft/rt3090

## 更新源信息并安装第三方无线网卡驱动
sudo apt-get update
sudo apt-get install rt3090-dkms
</pre>
<p>编辑<code>/etc/modprobe.d/blacklist.conf</code>文件，添加如下几行，将系统自带驱动模块加入黑名单：</p>
<pre lang="bash">
# blacklist other Ralink modules in favour of 3090 DKMS mod
blacklist rt2860sta
blacklist rt2870sta
blacklist rt2800pci
blacklist rt2800usb
blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2x00usb
</pre>
<h4>安装NVidia驱动</h4>
<p>为了充分发挥Ion平台的高清硬解效能，安装NVidia的私有驱动是必须的。运行<code>sudo apt-get install nvidia-current</code>安装好驱动程序。安装好的XBMC会出现明显的CPU占用率过高的问题，解决的办法时安装好NVidia的驱动之后，编辑<code>/etc/X11/xorg.conf</code>文件，加入<code>NoFlip</code>设置：</p>
<pre lang="xorg_conf">
Section "Device"
	Identifier		"Device0"
	Driver			"nvidia"
	VendorName	"NVIDIA Corporation"
	BoardName		"ION"
	Option		"NoFlip" "1" # 加入此行
EndSection
</pre>
<h4>调试HDMI的音频输出</h4>
<p>Ubuntu下调试音频的HDMI输出有点复杂，具体我参考了<a href="http://wiki.xbmc.org/index.php?title=HOW-TO_set_up_HDMI_audio_on_nVidia_GeForce_G210,_GT220,_or_GT240" title="HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240">HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240</a>进行调试，这里简述下我的调试过程：</p>
<ol>
<li>运行<code>alsamixer</code>，F6切换到HDA NVidia声卡输出，打开Master, PCM, Front, Mic, S/PDIF, S/PDIF Def。</li>
<li>编辑<code>/etc/modprobe.d/sound.conf</code>，加入以下这行:
<pre lang="bash">
options snd-hda-intel enable_msi=0 probe_mask=0xffff,0xfff2
</pre>
</li>
<li>编辑<code>/etc/pulse/default.pa</code>，加入以下这行:
<pre lang="bash">
load-module module-alsa-sink device=hw:1,3
</pre>
</li>
<li>编辑<code>/etc/asound.conf</code>，加入以下几行:
<pre lang="bash">
#pcm.!default hdmi:Nvidia

pcm.dmixer {
	type dmix
	ipc_key 1024
	ipc_key_add_uid false
	ipc_perm 0660
	slave {
		pcm "hw:1,3"
		rate 48000
		channels 2
		period_time 0
		period_size 1024
		buffer_time 0
		buffer_size 4096
	}
}

pcm.!default {
	type plug
	slave.pcm "dmixer"
}
</pre>
</li>
</ol>
<h4>开启iptables+ssh</h4>
<p>由于本机是通过无线路由连接，最好先在路由器上映射好相应端口并绑定一个固定IP以方便维护，在此不再冗述。既然系统已经搭建好了，可以去掉键鼠通过开启sshd服务进行远程操作维护。为了更安全的系统，iptables+sshguard也是不可或缺的。</p>
<p>运行命令安装iptables, ssh和sshguard：</p>
<pre lang="bash">
sudo apt-get install iptables openssh-server sshguard
</pre>
<p>修改<code>/etc/ssh/sshd_config</code>：</p>
<pre lang="bash">
Port 2727 # 将默认的22端口修改为任意其他端口，例如2727。
</pre>
<p>然后是设置iptables规则，编辑<code>/etc/iptables</code> （没有可新建）：</p>
<pre lang="bash">
# Generated by iptables-save v1.4.7 on Sat May 22 20:03:22 2010
*raw
:PREROUTING ACCEPT [21639:19095836]
:OUTPUT ACCEPT [22904:4573912]
COMMIT
# Completed on Sat May 22 20:03:22 2010
# Generated by iptables-save v1.4.7 on Sat May 22 20:03:22 2010
*filter
:INPUT DROP [7:2223]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [9409:1846937]
:sshguard - [0:0]

-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

# 设置内网IP权限访问，默认允许
-A INPUT -s 192.168.1.100/32 -j ACCEPT
-A INPUT -s 192.168.1.101/32 -j ACCEPT

# 打开transmission-daemon端口6666，其中9091是transmission web的端口
-A INPUT -p tcp -m tcp --dport 6666 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9091 -j ACCEPT

# 允许路由器的UPnP
#-A INPUT -s 192.168.1.1 -j ACCEPT

# 设置sshd端口号（2727）的访问，先经sshguard判断访问是否异常
-A INPUT -p tcp -m tcp --dport 2727 -j sshguard
-A INPUT -p tcp -m tcp --dport 2727 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags RST RST -j DROP

COMMIT
# Completed on Sat May 22 20:03:22 2010
</pre>
<p>然后直接运行<code>sudo iptables-restore &lt; /etc/iptables</code>导入iptables设置。悲剧的是，Ubuntu不会自动保存iptables设置，所以必须在开机时载入设置，编辑<code>/etc/network/interfaces</code>文件，在末尾加入以下两行：</p>
<pre lang="bash">
pre-up iptables-restore &lt; /etc/iptables
post-down iptables-save &gt; /etc/iptables
</pre>
<p>运行<code>sudo apt-get install rcconf</code>并通过<code>rcconf</code>将ssh加入系统启动自运行进程。然后重启电脑，就可以通过其他主机来进行操作、维护了。</p>
<h3>安装XBMC及相关组件</h3>
<h4>安装XBMC</h4>
<p>要获得XBMC之前，我们先需要添加第三方源，运行如下命令完成XBMC安装：</p>
<pre lang="bash">
sudo add-apt-repository ppa:team-xbmc
sudo apt-get update
sudo apt-get install xbmc xbmc-standalone
</pre>
<p>首次运行XBMC会发现中文无法识别的问题，需要做的是拷贝一个中文字体进来，例如我喜欢使用Google制造的Droid Sans Fallback字体，运行:</p>
<pre lang="bash">
sudo cp DroidSansFallback.ttf /usr/share/xbmc/media/Fonts/arial.ttf
sed -e "s/language&gt;english&lt;\/language/language&gt;Chinese (Simple)&lt;\/language/" -i ~/.xbmc/userdata/guisettings.xml
sed -e "s/font&gt;Default&lt;\/font/font&gt;Arial&lt;\/font/" -i ~/.xbmc/userdata/guisettings.xml
</pre>
<h4>安装Lirc实现遥控播放XBMC</h4>
<p>作为HTPC的一部分，脱离键鼠使用遥控器进行影院播放控制自然是必不可少，我使用的是<a href="http://wiki.xbmc.org/index.php?title=Remote_Control_Reviews#Microsoft_Media_Center_Remote_Control" title="Microsoft Media Center Remote Control">Microsoft Media Center的遥控器</a>，通过USB外接一个红外线接收器就可以了。</p>
<p>要让遥控器工作，首先得安装lirc，运行<code>sudo apt-get install lirc</code>完成安装，首次安装完成会弹出遥控器的终端配置界面：</p>
<ul>
<li>在Remote Control Configuration中选择Windows Media Center Transceivers/Remotes (all)</li>
<li>在IR transmitter, if present中均选择Microsoft Windows Media Center V2 (usb) : Direct TV Receiver</li>
</ul>
<p>然后将lircd加入系统自启动进程，重启计算机，在终端中运行<code>irw</code>，摁遥控器的方向键进行测试，如果终端内能正确识别遥控器操作说明遥控器准备就绪了。如果无法识别的话，需要<code>sudo dpkg-reconfigure lirc</code>重启进行配置，或者就是遥控器的电池电力不足（我就是因为这个傻逼原因瞎折腾了系统两个多小时）。</p>
<h4>安装Transmission-daemon</h4>
<p>作为高清下载机，实现Bittorrent下载的远程管理是必不可少的，首选Transmission这个跨平台的Bittorrent下载利器，尤其是它的daemon模式，支持web远程操作，而且web端的操作针对iPhone等手持设备做了UI优化。运行<code>sudo apt-get install transmission-daemon</code>安装。按照<a href="https://trac.transmissionbt.com/wiki/EditConfigFiles" title="EditConfigFiles – Transmission">网站上的设置</a>说明更改settings.json文件配置。</p>
<p>由于transmission-daemon默认使用的是debian-transmission用户名运行，需要将其改为我的用户名xbmc进行更好的管理。修改<code>/etc/init.d/transmission-daemon</code>文件：</p>
<pre lang="bash">
#USER=debian-transmission #注释此行，修改为自定义的用户名
USER=xbmc
</pre>
<h4>安装XBMC插件</h4>
<p>XBMC的强大之处在于可以通过插件进行无限扩展，我安装了Getlib, 7176, TheMovieDb几个电影类的削刮器以根据文件名自动获取电影的封面和制作信息。剧集方面安装了TheTVDb的削刮器，另外还可以安装<a href="http://code.google.com/p/xbmc-addons-chinese/" title="xbmc-addons-chinese">xbmc-addons-chinese</a>里的扩展，添加Youku等在线视频播放，更好地扩展网络电视功能。</p>
<p>此外，在XBMC下可安装Transmission的插件，便可通过XBMC监控Transmission下载，例图：</p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot009.png" alt="Transmission Via XBMC" width="700" height="438" class="no-margin" /></p>
<h4>安装XBMC皮肤: Aeon Nox</h4>
<p>XBMC下最漂亮的皮肤莫过于Aeon系列，Aeon下面有Aeon65, Aeon MQ2和Aeon Nox三个mod。个人更偏向于使用<a href="http://forum.xbmc.org/showthread.php?t=89151" title="Aeon Nox">Aeon Nox</a>，系统资源占用少于前二者且皮肤功能异常强大，整个UI也非常漂亮（见下文“截图欣赏”）。</p>
<p>安装方法很简单，去XBMC的扩展库里找到Aeon Nox安装就行了，下载过程可能有点慢，毕竟这个皮肤解压后的体积高达60MB。不过皮肤安装后的问题是缺少中文字体支持，解决方法是:</p>
<p>复制一个中文字体到<code>~/.xbmc/addons/skin.aeon.nox/fonts</code>目录，并重命名为Arial.ttf（简单起见）。</p>
<p>然后修改<code>~/.xbmc/addons/skin.aeon.nox/720p/Font.xml</code>文件，将<code>filename</code>中的字体全部替换为Arial.ttf。</p>
<h3>优化系统设置</h3>
<p>为了更好地实现HTPC的流畅体验，还需要对安装后的系统进行一些优化。</p>
<ol>
<li><strong>设置开机免密码自动登录XBMC账户</strong><br />
在System -&gt; Administration -&gt; Login Screen Settings中点击Unlock，设置XBMC账户为自动登录。</li>
<li><strong>设置XBMC关机功能</strong><br />
在XBMC的系统设置中的省电模式里，将自动关机功能中的选项设置为关机，这样既可通过摁遥控器上的关机键实现关机。</li>
</ol>
<p>整个系统优化完之后，就可以在GDM中选择默认登录xbmc-standalone环境，而不进入Gnome桌面环境，以节省不必要的系统资源占用。</p>
<h3>截图欣赏</h3>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot011.png" alt="screenshot011" width="700" height="437" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot0011.png" alt="screenshot001" width="700" height="437" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot000.png" alt="screenshot000" width="700" height="437" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot014.png" alt="Movie Up" width="700" height="437" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot0001.png" alt="screenshot000" width="700" height="437" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot0012.png" alt="screenshot001" width="700" height="437" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot0031.png" alt="screenshot003" width="700" height="438" class="no-margin" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2011/04/screenshot005.png" alt="screenshot005" width="700" height="438" class="no-margin" /></p>
<h3>参考:</h3>
<ol>
<li><a href="http://wiki.xbmc.org/index.php?title=HOW-TO_perform_a_miminal_Ubuntu_and_XBMC_install_on_a_Asus_EeeBox_PC_EB1501" title="HOW-TO perform a miminal Ubuntu and XBMC install on a Asus EeeBox PC EB1501">HOW-TO perform a miminal Ubuntu and XBMC install on a Asus EeeBox PC EB1501</a></li>
<li><a href="http://wiki.xbmc.org/index.php?title=HOW-TO_set_up_HDMI_audio_on_nVidia_GeForce_G210,_GT220,_or_GT240" title="HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240">HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240</a></li>
<li><a href="http://ubuntuforums.org/showthread.php?t=1670681" title="Setting up Ubuntu 10.10 on Revo 3700 - HDMI Audio, XBMC, HD Video on IPlayer/Youtube">Setting up Ubuntu 10.10 on Revo 3700</a></li>
<li><a href="http://forum.ubuntu.org.cn/viewtopic.php?t=184521" title="XBMC 10.04 ＋ 高清硬解的中文设置">XBMC 10.04 ＋ 高清硬解的中文设置</a></li>
</ol>
<h3>End</h3>
<p>写在最后，我已经为我的HTPC新添置了一块Seagate的GoFlex Desk 2TB移动硬盘以满足我下高清的需求，Acer的R3700主机连续运行几天既不会有噪音也没有发热的现象。电脑之间，电脑与手机之间通过无线网络进行互联，一定要用上801.11n的无线路由器才能满足无线网络之间的数据高速传输。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2011/04/03/build-home-media-center-on-an-ubuntu-system-with-xbmc/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>用Remuco实现手机遥控MPD播放</title>
		<link>http://blog.punkid.org/2010/07/04/remote-control-mpd-via-remuco-with-your-smartphone/</link>
		<comments>http://blog.punkid.org/2010/07/04/remote-control-mpd-via-remuco-with-your-smartphone/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 07:51:43 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[E71]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mpd]]></category>
		<category><![CDATA[remuco]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=364</guid>
		<description><![CDATA[自从Amarok和Gwenview这两款qt3.5时代的经典K软跨入了qt4的2.0时代，我就彻底放弃了qt4下的所有软件，连KDE4都给mask了，为了能够继续用上Amarok 1.4，死守着kde-sunset overlay，无奈愈发觉得Amarok 1.4的内存占用率还是太高了，于是全面转向了MPD (Music Player Daemon) + ncmpcpp，还是字符界面加上强大的键盘快捷键操作最顺服，最省心。 既然MPD是纯粹的C/S理念，为MPD找个手机client端也应该不难。于是找到了Remuco这款软件，它能够通过蓝牙或者Wifi的方式遥控Linux下的大部分媒体播放器，包括Amarok, Audacious, Banshee, Exaile, MPD, MPlayer, Rhythmbox, Songbird, Totem, TVtime, VLC和XMMS2。而且由于本身基于java，理论上支持java且有蓝牙或者Wifi设备的手机都能安装并使用它，从它的List of client devices successfully used with Remuco上看，实验成功的手机还是蛮多的。我在我的诺记非阉割版的E71上也成功实现了，下面是我在Gentoo Linux和E71上的实现过程： （P.S: 这绝对是我最后一台诺记，别在BS我们这种没文化的弱鸡鸭用户了。我们都知道，有钱有文化的才用iPhone，Android手机。） 首先是保证你装了MPD，并且能够顺利运行，MPD默认使用的端口是6600，没有特殊需求的话，最好还是不要改。 然后是去Remuco的Googlecode上下载源码包。源码包包含两个部分，一个是主机上的server实现，另一个是手机用的客户端。一般来说我们都可以找到已经编译好的Remuco二进制包，在Gentoo下Sunrise overlay里也有ebuild，或者直接下载ebuild文件放到自己的本地overlay里吧，最近的版本是remuco-0.9.3-r2.ebuild。 因为我只需要开启remuco对MPD的支持，所以我只启用了mpd一个USE: # echo "net-wireless/remuco mpd" &#62;&#62; /etc/portage/package.use # emerge remuco 然后运行remuco-mpd, 如果你发现运行失败的话（请查看~/.cache/remuco/mpd.log），很有可能是和我一样，主机没有蓝牙设备，我们要做的是关闭remuco-mpd的蓝牙支持。找到~/.config/remuco/remuco.cfg文件，将如下一句键值替换: [DEFAULT] bluetooth-enabled = 0 #把1改为0 ... 重新运行remuco-mpd，如果~/.cache/remuco/mpd.log里有提示: [ manager.py ... [...]]]></description>
			<content:encoded><![CDATA[<p>自从Amarok和Gwenview这两款qt3.5时代的经典K软跨入了qt4的2.0时代，我就彻底放弃了qt4下的所有软件，连KDE4都给mask了，为了能够继续用上Amarok 1.4，死守着kde-sunset overlay，无奈愈发觉得Amarok 1.4的内存占用率还是太高了，于是全面转向了<a href="http://www.musicpd.org" title="Music Player Daemon">MPD</a> (Music Player Daemon) + <a href="http://unkart.ovh.org/ncmpcpp/" title="Ncmpcpp - ncmpc++ mpd client">ncmpcpp</a>，还是字符界面加上强大的键盘快捷键操作最顺服，最省心。</p>
<p>既然MPD是纯粹的C/S理念，为MPD找个手机client端也应该不难。于是找到了<a href="http://code.google.com/p/remuco/" title="Wireless remote control for Linux media players">Remuco</a>这款软件，它能够通过蓝牙或者Wifi的方式遥控Linux下的大部分媒体播放器，包括Amarok, Audacious, Banshee, Exaile, MPD, MPlayer, Rhythmbox, Songbird, Totem, TVtime, VLC和XMMS2。而且由于本身基于java，理论上支持java且有蓝牙或者Wifi设备的手机都能安装并使用它，从它的<a href="http://code.google.com/p/remuco/wiki/ClientDevices" title="List of client devices successfully used with Remuco">List of client devices successfully used with Remuco</a>上看，实验成功的手机还是蛮多的。我在我的诺记非阉割版的E71上也成功实现了，下面是我在Gentoo Linux和E71上的实现过程：</p>
<p>（P.S: 这绝对是我最后一台诺记，别在BS我们这种没文化的弱鸡鸭用户了。我们都知道，有钱有文化的才用iPhone，Android手机。）<br />
<span id="more-364"></span><br />
首先是保证你装了MPD，并且能够顺利运行，MPD默认使用的端口是6600，没有特殊需求的话，最好还是不要改。</p>
<p>然后是去Remuco的<a href="http://code.google.com/p/remuco/downloads/list" title="Downloads - remuco">Googlecode</a>上下载源码包。源码包包含两个部分，一个是主机上的server实现，另一个是手机用的客户端。一般来说我们都可以找到已经编译好的Remuco二进制包，在Gentoo下Sunrise overlay里也有ebuild，或者直接下载ebuild文件放到自己的本地overlay里吧，最近的版本是<a href="http://gentoo-overlays.zugaina.org/sunrise/portage/net-wireless/remuco/remuco-0.9.3-r2.ebuild" title="remuco-0.9.3-r2.ebuild for gentoo">remuco-0.9.3-r2.ebuild</a>。</p>
<p>因为我只需要开启remuco对MPD的支持，所以我只启用了<code>mpd</code>一个USE:</p>
<pre lang="bash">
# echo "net-wireless/remuco mpd" &gt;&gt; /etc/portage/package.use
# emerge remuco
</pre>
<p>然后运行<code>remuco-mpd</code>, 如果你发现运行失败的话（请查看<code>~/.cache/remuco/mpd.log</code>），很有可能是和我一样，主机没有蓝牙设备，我们要做的是关闭remuco-mpd的蓝牙支持。找到<code>~/.config/remuco/remuco.cfg</code>文件，将如下一句键值替换:</p>
<pre lang="bash">
[DEFAULT]
bluetooth-enabled = 0 #把1改为0
...
</pre>
<p>重新运行<code>remuco-mpd</code>，如果<code>~/.cache/remuco/mpd.log</code>里有提示: <code>[ manager.py ... ] player adapter started</code>则表示成功运行。</p>
<p>接下来是手机客户端，解压缩的源码包有个<code>client/midp/app</code>目录下有个<code>remuco.jad</code>和<code>remuco.jar</code>安装文件，不需要BT的话就安装<code>no-bluetooth</code>子目录下的安装包吧。</p>
<p>运行手机上的Remuco客户端，一般来说设置<code>Host or IP</code>项就行了，我通过路由器已经绑定了主机的固定IP为192.168.1.100，默认wifi的连接端口是34271，启用了iptables的话还得对端口放行，因为我同样固定了手机的IP为192.168.1.101，所以之前就通过iptables对来自手机的全部访问都放行了。</p>
<pre lang="bash">
# iptables -A INPUT -s 192.168.1.101 -j ACCEPT
</pre>
<p>没什么问题的话，手机就能顺利控制MPD啦，这是主机上运行的ncmpcpp，显示正在播放Mono的<em>Follow the Map</em>。</p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2010/07/ncmpcpp.png" alt="ncmpcpp" width="677" height="433" class="no-margin" /></p>
<p>来看下手机端的显示，同样是Mono的<em>Follow the Map</em>。</p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2010/07/Screenshot0004.png" alt="Remuco on E71" width="320" height="240" /></p>
<p>还可以用手机查看播放列表及MPD上的音乐库，并通过手机进行遥控操作。</p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2010/07/Screenshot0005.png" alt="Remuco on E71" width="320" height="240" /></p>
<p><img src="http://blog.punkid.org/wp-content/uploads/2010/07/Screenshot0006.png" alt="Remuco on E71" width="320" height="240" /></p>
<p>另外，录制了一小段演示视频，视频内演示了通过手机快捷键n/p实现歌曲的切换，以及添加歌曲到播放列表，整个操作都是手机端和主机同步的。拍的有点抖，实在不是当AV男的料啊 -_-|||（注：此视频基于HTML5的video技术，采用开源的ogv格式，只支持h.264的Safari&#8230;忽略你！）</p>
<p class="center">
<video class="html5-video" width="500" height="375" preload="none" controls><br />
<source src="http://punkid.org/glade/video/remuco-demo.ogv" type='video/ogg; codecs="theora, vorbis"' /><br />
</video></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2010/07/04/remote-control-mpd-via-remuco-with-your-smartphone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://punkid.org/glade/video/remuco-demo.ogv" length="31702290" type="video/ogg" />
		</item>
		<item>
		<title>aMule下载短信通知的飞信实现</title>
		<link>http://blog.punkid.org/2009/03/27/free-sms-notification-via-fetion-on-amule-completed-download/</link>
		<comments>http://blog.punkid.org/2009/03/27/free-sms-notification-via-fetion-on-amule-completed-download/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 13:37:34 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[aMule]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=303</guid>
		<description><![CDATA[上回用GCalcli实现了给aMule增加下载完成短信通知功能，不过由于GCal的短信格式问题并不完美，在Druggo的提示下转而使用飞信来实现这个吧。 飞信虽然在linux下已经有libfetion和linux-fetion for purple了，不过都没有直观的纯CLI操作方式。找来找去只找到个闭源的飞信机器人，这软件优点是:纯命令操作，简单快捷。 不爽的地方是: 闭源，依赖的库文件有版本要求。而且从主页来看，商业味比较浓，怕有猫腻 初次运行后会生成数个当前用户无访问权限的文件夹，强行删除再运行又会重新生成 唉，我又开始二了，用人家的东西还这么多牢骚。下面是实现方法： 在此处下载飞信机器人的linux版，运行程序依赖的库文件有4个:libcrypto.so.0.9.8, libssl.so.0.9.8, libACE.so.5.6.8, libACE_SSL.so.5.6.8。前两个属于openssh，后两个可以# emerge dev-libs/ace得到，鉴于版本问题和libACE 8MB的体积问题，还是直接下载它提供的库文件包吧。 建议解压后放到自己的$HOME目录下，例如我把它解压到$HOME/fetion-cli下，把解压的4个库文件也放到此目录下。 飞信机器人支持config文件读取帐户信息，创建一个$HOME/.fetion-cli.conf，按以下格式输入你的帐户信息: # ID Mobile Password 1 你的手机号码 你的飞信密码 然后是建立一个bash脚本fetion-sms.sh #!/bin/bash #usage: fetion-sms.sh MobileNum. ENTRY cd /home/punkid/fetion-cli LD_LIBRARY_PATH=. ./fetion --config=$HOME/.fetion-cli.conf --index=1 --to=$1 --msg-utf8="$2" 这个脚本用法很简单，输入$ sh fetion-sms.sh 接收方的手机好码 飞信消息内容就完成了。 所以在aMule的Download completed event里配置如下就行了: sh /home/punkid/scripts/fetion-sms.sh 你的手机号码 "%NAME 下载完成" 这回算是比较满意了，飞信接收速度快而且不像GCal那样分两条不完整短信发过来。]]></description>
			<content:encoded><![CDATA[<p>上回用GCalcli实现了<a href="http://blog.punkid.org/2009/03/23/free-sms-notification-on-amule-completed-download" title="给aMule增加下载完成短信通知功能">给aMule增加下载完成短信通知功能</a>，不过由于GCal的短信格式问题并不完美，在<a href="http://blog.punkid.org/2009/03/23/free-sms-notification-on-amule-completed-download/comment-page-1/#comment-1470" title="Comment by Druggo">Druggo的提示</a>下转而使用飞信来实现这个吧。</p>
<p>飞信虽然在linux下已经有libfetion和linux-fetion for purple了，不过都没有直观的纯CLI操作方式。找来找去只找到个闭源的<a href="http://www.it-adv.net/" title="飞信机器人">飞信机器人</a>，这软件优点是:纯命令操作，简单快捷。</p>
<p>不爽的地方是:</p>
<ol>
<li>闭源，依赖的库文件有版本要求。而且从主页来看，商业味比较浓，怕有猫腻</li>
<li>初次运行后会生成数个当前用户无访问权限的文件夹，强行删除再运行又会重新生成</li>
</ol>
<p>唉，我又开始二了，用人家的东西还这么多牢骚。下面是实现方法：<br />
<span id="more-303"></span><br />
在<a href="http://bbs.it-adv.net/viewthread.php?tid=155" title="下载飞信机器人">此处下载飞信机器人的linux版</a>，运行程序依赖的库文件有4个:<code>libcrypto.so.0.9.8</code>, <code>libssl.so.0.9.8</code>, <code>libACE.so.5.6.8</code>, <code>libACE_SSL.so.5.6.8</code>。前两个属于openssh，后两个可以<code># emerge dev-libs/ace</code>得到，鉴于版本问题和libACE 8MB的体积问题，还是直接下载它提供的<a href="http://www.it-adv.net/fetion/downng/library_linux.tar.gz" title="飞信机器人 Linux库文件包">库文件包</a>吧。</p>
<p>建议解压后放到自己的<code>$HOME</code>目录下，例如我把它解压到<code>$HOME/fetion-cli</code>下，把解压的4个库文件也放到此目录下。</p>
<p>飞信机器人支持config文件读取帐户信息，创建一个<code>$HOME/.fetion-cli.conf</code>，按以下格式输入你的帐户信息:</p>
<pre>
# ID    Mobile          Password
1        你的手机号码   你的飞信密码
</pre>
<p>然后是建立一个bash脚本<code>fetion-sms.sh</code></p>
<pre lang="bash">
#!/bin/bash
#usage: fetion-sms.sh MobileNum. ENTRY

cd /home/punkid/fetion-cli
LD_LIBRARY_PATH=. ./fetion --config=$HOME/.fetion-cli.conf --index=1 --to=$1 --msg-utf8="$2"
</pre>
<p>这个脚本用法很简单，输入<code>$ sh fetion-sms.sh 接收方的手机好码 飞信消息内容</code>就完成了。</p>
<p>所以在aMule的Download completed event里配置如下就行了:</p>
<pre lang="bash">
sh /home/punkid/scripts/fetion-sms.sh 你的手机号码 "%NAME 下载完成"
</pre>
<p>这回算是比较满意了，飞信接收速度快而且不像GCal那样分两条不完整短信发过来。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2009/03/27/free-sms-notification-via-fetion-on-amule-completed-download/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>给aMule增加下载完成短信通知功能</title>
		<link>http://blog.punkid.org/2009/03/23/free-sms-notification-on-amule-completed-download/</link>
		<comments>http://blog.punkid.org/2009/03/23/free-sms-notification-on-amule-completed-download/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 13:40:16 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[aMule]]></category>
		<category><![CDATA[gcalcli]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[Google App]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=301</guid>
		<description><![CDATA[自从入手了E71，装上PuTTY for Symbian OS后就能通过wifi+ssh远程遥控我的电脑了。一个常遇到的问题，人得跑出去，而电脑上的aMule正在挂高清，我想知道我正等着看的东西什么时候下载完成了，然后我好执行远程关机或者选择继续让aMule下载其他的东西。 思索了下，最好的通知方式莫过于短信，而真正可用的免费短信功能莫过于Google Calendar的短信通知了。由于aMule本身就有Events功能，剩下的唯一问题就是能在linux下执行的Gcal CLI了。好在为Google做的third party的大有人在，很快就找到了Gcalcli这个python客户端，连ebuild在Gentoo Bugzilla上都有了。 gcalcli的用法很简单，先在$HOME目录下创建一个.gcalclirc文件，里面写入以下几行: [gcalcli] user:yourname@gmail.com pw:yourpassword cals:all 写法无须解释，最好至少给chmod 600 .gcalclirc下，毕竟密码是明文的，给别人看到就糟了。 然后新建一个download-notify.sh的文件，写入如下几行: #!/bin/bash #usage: download-notify.sh FILENAME NOTIFY_TIME=`date --date='+5 min' +%R` FILENAME=$1 ENTRY="$NOTIFY_TIME $FILENAME download finished" gcalcli quick "$ENTRY" 这是用来快速添加Google Calendar事件的脚本，设定时间是当前时间的5分钟后(给予一定时间差的容错值免得短信还没来得及通知就已经成历史事件了)，文件名将由aMule的Events传递。 接下来要做的是进入Google Calendar设置默认的通知方式，先确保你开通了短信通知功能，然后进入Settings -&#62; Calendars标签页 -&#62; Notifications，将默认通知方式设置为1分钟前短信通知。 剩下的就是aMule设置的问题了。进入Preferences -&#62; Events，在Event types里选择Download completed，有两个可供执行脚本的input框，第一个是当aMule Core发现下载完成时执行指定命令，第二个是仅当aMule GUI发现下载完成时执行指定命令。不管你使用aMule daemon还是aMule GUI，第一个是绝对可行的。所以开启第一个并输入类似命令sh ~/scripts/download-notify.sh "%NAME"。 OK，可用了。短信通知还是蛮及时的，唯一不爽的就是Google非得分两条未满短信通知我。 有了gcalcli能做的事就多了，例如电脑一旦发现sshd遭受brute [...]]]></description>
			<content:encoded><![CDATA[<p>自从入手了E71，装上<a href="http://s2putty.sourceforge.net/" title="PuTTY for Symbian OS">PuTTY for Symbian OS</a>后就能通过wifi+ssh远程遥控我的电脑了。一个常遇到的问题，人得跑出去，而电脑上的aMule正在挂高清，我想知道我正等着看的东西什么时候下载完成了，然后我好执行远程关机或者选择继续让aMule下载其他的东西。</p>
<p>思索了下，最好的通知方式莫过于短信，而真正可用的免费短信功能莫过于<a href="http://calendar.google.com/" title="Google Calendar">Google Calendar</a>的短信通知了。由于aMule本身就有Events功能，剩下的唯一问题就是能在linux下执行的Gcal CLI了。好在为Google做的third party的大有人在，很快就找到了<a href="http://code.google.com/p/gcalcli/" title="Google Calendar Command Line Interface">Gcalcli</a>这个python客户端，连<a href="http://bugs.gentoo.org/195592" title="Bugzilla Bug 195592 - app-misc/gcalcli-1.4 (New Package)">ebuild</a>在Gentoo Bugzilla上都有了。</p>
<p>gcalcli的用法很简单，先在<code>$HOME</code>目录下创建一个<code>.gcalclirc</code>文件，里面写入以下几行:<br />
<span id="more-301"></span></p>
<pre lang="bash">
[gcalcli]
user:yourname@gmail.com
pw:yourpassword
cals:all
</pre>
<p>写法无须解释，最好至少给<code>chmod 600 .gcalclirc</code>下，毕竟密码是明文的，给别人看到就糟了。</p>
<p>然后新建一个<code>download-notify.sh</code>的文件，写入如下几行:</p>
<pre lang="bash">
#!/bin/bash
#usage: download-notify.sh FILENAME

NOTIFY_TIME=`date --date='+5 min' +%R`
FILENAME=$1
ENTRY="$NOTIFY_TIME $FILENAME download finished"

gcalcli quick "$ENTRY"
</pre>
<p>这是用来快速添加Google Calendar事件的脚本，设定时间是当前时间的5分钟后(给予一定时间差的容错值免得短信还没来得及通知就已经成历史事件了)，文件名将由aMule的Events传递。</p>
<p>接下来要做的是进入Google Calendar设置默认的通知方式，<strong>先确保你开通了短信通知功能</strong>，然后进入Settings -&gt; Calendars标签页 -&gt; Notifications，将默认通知方式设置为1分钟前短信通知。</p>
<p><img src="http://pic.yupoo.com/punkid/0365272b01a6/qj3g0x7f.jpg" alt="gcal-setting" width="500" height="80" border="0" /></p>
<p>剩下的就是aMule设置的问题了。进入Preferences -&gt; Events，在Event types里选择Download completed，有两个可供执行脚本的input框，第一个是当aMule Core发现下载完成时执行指定命令，第二个是仅当aMule GUI发现下载完成时执行指定命令。不管你使用aMule daemon还是aMule GUI，第一个是绝对可行的。所以开启第一个并输入类似命令<code>sh ~/scripts/download-notify.sh "%NAME"</code>。</p>
<p><img src="http://pic.yupoo.com/punkid/5345072b00c2/jc2eie4m.jpg" alt="amule-setting" width="500" height="281" border="0" /></p>
<p>OK，可用了。短信通知还是蛮及时的，唯一不爽的就是Google非得分两条未满短信通知我。</p>
<p><img src="http://pic.yupoo.com/punkid/9235772b0703/b5x926x5.jpg" alt="reminder" width="500" height="281" border="0" /></p>
<p>有了gcalcli能做的事就多了，例如电脑一旦发现sshd遭受brute force attacks时立刻短信通知，对网管应该比较有用吧 :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2009/03/23/free-sms-notification-on-amule-completed-download/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Conky Script: China Stock Market Chart</title>
		<link>http://blog.punkid.org/2008/12/05/conky-script-china-stock-market-chart/</link>
		<comments>http://blog.punkid.org/2008/12/05/conky-script-china-stock-market-chart/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 06:02:30 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[conky]]></category>
		<category><![CDATA[Stock]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=281</guid>
		<description><![CDATA[本来是想写个能创建并显示portfolio信息的脚本，只奈平日闲暇不多，先凑合用上这个吧。长话短说，把股票代码写入script里，然后用conky显示即时数据，省的天天跑Google Finance了。 这是脚本程序，保存为stockwidget.sh #!/bin/bash URL="http://hq.sinajs.cn/list=s_sh000001,s_sh600036,s_sh600000,s_sh600030,hk03968" curl -s --connect-timeout 30 $URL &#124; iconv \ -f gb2312 -t utf-8 &#124; awk \ -F\" '{ print $2 }' &#124; awk \ ' BEGIN { FS="," printf("%s %16s %14s %14s\n", "Name", "Price", "Change", "Percentage") } { if (NF==6) { printf("%s %12.2f %14.2f %14.2f\n", $1, $2, $3, $4) } else [...]]]></description>
			<content:encoded><![CDATA[<p>本来是想写个能创建并显示portfolio信息的脚本，只奈平日闲暇不多，先凑合用上这个吧。长话短说，把股票代码写入script里，然后用conky显示即时数据，省的天天跑<a href="http://finance.google.cn/" title="Google 财经">Google Finance</a>了。</p>
<p><img src="http://pic.yupoo.com/punkid/3234369ae799/ryndyxi1.jpg" alt="stock-conky" width="327" height="104" border="0" /></p>
<p>这是脚本程序，保存为<code>stockwidget.sh</code><br />
<span id="more-281"></span></p>
<pre lang="bash">
#!/bin/bash

URL="http://hq.sinajs.cn/list=s_sh000001,s_sh600036,s_sh600000,s_sh600030,hk03968"

curl -s --connect-timeout 30 $URL | iconv \
	-f gb2312 -t utf-8 | awk \
	-F\" '{ print $2 }' | awk \
		'
		BEGIN {
			FS=","
			printf("%s %16s %14s %14s\n", "Name", "Price", "Change", "Percentage")
		}
		{
			if (NF==6) {
				printf("%s %12.2f %14.2f %14.2f\n", $1, $2, $3, $4)
			}
			else {
				printf("%s(H) %9.2f %14.2f %14.2f\n", $2, $7, $8, $9)
			}
		}'
</pre>
<p>其中的<code>sh600001</code>, <code>sh600036</code>, <code>sh600000</code>, <code>hk03968</code>是啥就不用说了吧，反正上证股票在股票代码前加<code>sh</code>，深股加<code>sz</code>，港股加<code>hk</code>，其他的&#8230;暂时不关注，也不知道能不能从sina抓到数据。</p>
<p>然后在<code>.conkyrc</code>里加入这段:</p>
<pre lang="bash">
${color #ffffff}Stock:
${color #ffffff}${font WenQuanYi Bitmap Song:pixelsize=9}${execi 30 /home/punkid/scripts/stockwidget.sh}
</pre>
<p>不敢抓太频繁，每30秒更新一次数据吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/12/05/conky-script-china-stock-market-chart/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Why to Upgrade to Libgpod SVN Build</title>
		<link>http://blog.punkid.org/2008/11/09/why-to-upgrade-to-libgpod-svn-build/</link>
		<comments>http://blog.punkid.org/2008/11/09/why-to-upgrade-to-libgpod-svn-build/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 16:24:56 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[libgpod]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=266</guid>
		<description><![CDATA[I didnt pay much attention to the iPod artwork issue until I found the coverflow became extremely slow and out of response occasionally. I&#8217;m using Amarok via libgpod-0.6.0 to manage my iPod library, there&#8217;re approximately 1,000 songs of 68 albums in my iPod. As I checked the iPod_Control/Artwork directory of my iPod, it took up [...]]]></description>
			<content:encoded><![CDATA[<p>I didnt pay much attention to the <a href="http://amarok.kde.org/forum/index.php?action=printpage;topic=15032.0" title="Topic : Artwork on ipod classic on Amarok forums">iPod artwork issue</a> until I found the coverflow became extremely slow and out of response occasionally. </p>
<p>I&#8217;m using <a href="http://blog.punkid.org/2008/01/06/ultimate-guide-to-manage-your-ipod-under-linux/" title="Ultimate Guide to Manage Your iPod under Linux : Revised">Amarok via libgpod-0.6.0</a> to manage my iPod library, there&#8217;re approximately 1,000 songs of 68 albums in my iPod. As I checked the <code>iPod_Control/Artwork</code> directory of my iPod, it took up unexpectedly +300mb for the cover images.</p>
<pre lang="bash">
punkid@Genbox /media/MUGELLO/iPod_Control $ du -h Artwork/
314M    Artwork/
</pre>
<p><span id="more-266"></span><br />
Then I tried iTunes to rebuild my music library, the artwork database shrinks to 53mb.</p>
<pre lang="bash">
punkid@Genbox /media/MUGELLO/iPod_Control $ du -h Artwork/
53M     Artwork/
</pre>
<p>As someone in that post pointed out:</p>
<blockquote><p>
it turns out that iTunes isn&#8217;t actually storing one piece of artwork per track or even one per album &#8211; in my case at least, it stored one cover for only 2 of the tracks on the 12-track album &#8230;
</p></blockquote>
<p>Fortunately this issue has been fixed in the libgpod svn version, and the new artwork database size looks quite impressive. It&#8217;s even smaller than the iTunes&#8217; one.</p>
<pre lang="bash">
punkid@Genbox /media/MUGELLO/iPod_Control $ du -h Artwork/
18M     Artwork/
</pre>
<p>The latest libgpod svn build has already supported the new iPod Nano 4G, and the <a title="Go to comment 1356" href="http://blog.punkid.org/2008/01/06/ultimate-guide-to-manage-your-ipod-under-linux/#comment-1356">photo issue</a> also seems to be fixed. If you dont have the patience for a &#8220;never-landed&#8221; new stable release, grab the latest <a href="http://sourceforge.net/svn/?group_id=67873" title="SourceForge.net: Subversion">libgpod svn snapshot</a>.</p>
<p>For Gentoo users, you may put the <a href="http://punkid.org/genbox/home/ebuild/media-libs/libgpod/libgpod-9999.ebuild" title="media-libs/libgpod-9999.ebuild">media-libs/libgpod-9999.ebuild</a> into your personal ebuild repo.</p>
<p><strong>Note :</strong> I removed the <code>doc</code> USE flag from the ebuild due to the latest libgpod somehow needs gtk-doc to <a href="http://gtkpod.svn.sourceforge.net/viewvc/gtkpod?view=rev&#038;revision=1727" title="SourceForge.net Repository - [gtkpod] Revision 1727">make distcheck to work correctly</a>. Bad news, KDE fan boys :(</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/11/09/why-to-upgrade-to-libgpod-svn-build/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Backup Your Files Hierarchically to Dreamhost via Rsync</title>
		<link>http://blog.punkid.org/2008/10/29/backup-your-files-hierarchically-to-dreamhost-via-rsync/</link>
		<comments>http://blog.punkid.org/2008/10/29/backup-your-files-hierarchically-to-dreamhost-via-rsync/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 06:18:10 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=263</guid>
		<description><![CDATA[There&#8217;re some easy file backup n&#8217; sync online services such as Amazon S3 and Dropbox, however I find it not so handy when I want to sync my linux files hierarchially. I initially used git to sync my .vimrc file and my own ebuild repo, but it is not cost-efficient as I actually pay little [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;re some easy file backup n&#8217; sync online services such as <a href="http://aws.amazon.com/s3/" title="Amazon S3">Amazon S3</a> and <a href="https://www.getdropbox.com/" title="Dropbox">Dropbox</a>, however I find it not so handy when I want to sync my linux files hierarchially.</p>
<p>I initially used git to sync my <code>.vimrc</code> file and my own ebuild repo, but it is not cost-efficient as I actually pay little attention to the tracking commit things. So I ended up using rsync to synchronize my linux files to my dreamhost account.</p>
<h3>Preparation</h3>
<p>Assuming you&#8217;ve already had a dreamhost account with shell access priviledge (any other hosts with shell access will be fine as well). And you&#8217;re going to backup the following files on your system to the dreamhost server:<br />
<span id="more-263"></span></p>
<pre>
/home/yourname/.aliasrc
/home/yourname/.bashrc
/home/yourname/.config/openbox/
/home/yourname/files/
/home/yourname/.vimrc
/home/yourname/.vim/
/home/yourname/.xinitrc
/home/yourname/.Xdefaults
/etc/fstab
/etc/fonts/local.conf
/etc/make.conf
/etc/portage/package.*
/etc/X11/xorg.conf
</pre>
<p>Ofc you dont want others to see your <code>loveletter.txt</code> and <code>bankaccount.txt</code> under <code>files</code> directory, so the two files should be excluded from synchronization.</p>
<p>Put the following two lines into a textfile (such as <code>~/.rsync/excludes</code>) which we&#8217;ll use it later:</p>
<pre>
/home/yourname/files/loveletter.txt
/home/yourname/files/bankaccount.txt
</pre>
<h3>Howto</h3>
<p>I wrote this script for sync:</p>
<pre>
#!/bin/bash

includes="
/home/yourname/.aliasrc
/home/yourname/.bashrc
/home/yourname/.config/openbox/
/home/yourname/files/
/home/yourname/.vimrc
/home/yourname/.vim/
/home/yourname/.xinitrc
/home/yourname/.Xdefaults
/etc/fstab
/etc/fonts/local.conf
/etc/make.conf
/etc/portage/package.*
/etc/X11/xorg.conf
"

rsync -avzuCRpP --delete --delete-excluded $includes --exclude-from "/home/yourname/.rsync/excludes" -e ssh USERNAME@HOSTNAME:linux/
</pre>
<p>The <code>$includes</code> contains the files you want to sync, * wildcard supported, and to exclude the private files you&#8217;ll need the <code>--exclude-from</code> paramater.</p>
<p><code>USERNAME@HOSTNAME</code> is your dreamhost account and hostname, <code>:linux/</code> means sync the files to the linux directory under your dreamhost home directory.</p>
<p><code>-a</code> parameter makes sure your files will be synchronized recursively.</p>
<p><code>-C</code> is used for ignoring files like <code>.git</code>, <code>.svn</code>, <code>*.bak</code> and so on, ofc we dont want to waste time on transfering these useless things.</p>
<p><code>-R</code> is needed for transfering hierarchically, this means I can sync my <code>/etc/make.conf </code>file right under <code>linux/etc/</code> directory on my dreamhost.</p>
<p><code>-P</code> parameter is quite useful when the transaction is interrupted, you can continue the process somewhen later.</p>
<p>Now you can <code>chmod +x scriptname</code> before you run it first time.</p>
<p>Fetch the backup files from your dreamhost is easy, just to run:</p>
<pre>
rsync -e ssh -av USERNAME@HOSTNAME:linux/ backup/
</pre>
<p>The files will be transfered to the <code>backup</code> directory on the local computer.</p>
<p>You may need the <a href="http://www.debian-administration.org/articles/152" title="Password-less logins with OpenSSH">Password-less SSH Login</a> if you want to add this script to the cron job.</p>
<p>I use this cron job to make sure the script run automatically at 23:30 p.m. on every Monday and Thursday.</p>
<pre>
30 23 * * 1,4   punkid   sh /home/punkid/scripts/autobackup.sh
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/10/29/backup-your-files-hierarchically-to-dreamhost-via-rsync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>华文黑体无法在KDE4下正常渲染</title>
		<link>http://blog.punkid.org/2008/10/20/stheiti-isnt-properly-rendered-on-kde4/</link>
		<comments>http://blog.punkid.org/2008/10/20/stheiti-isnt-properly-rendered-on-kde4/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 16:23:37 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[kde4]]></category>
		<category><![CDATA[华文黑体]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=257</guid>
		<description><![CDATA[雅黑渲染没问题，华文黑体在普通字号下惨不忍睹 &#8230; AA开关，hintnone/slight/medium/full都试，无改善。 KDE4.12已经蛮稳定的了，UI很漂亮 Dolphin取代Konqueror是明智的选择，加上tab后的dolphin用起来很舒服 Amarok 2 beta2 &#8230; 绝对是个倒退! UI难看不说，细节打磨也是一塌糊涂，iPod删歌居然要一首首的删除，新的树形菜单也很不friendly Win键没法映射]]></description>
			<content:encoded><![CDATA[<p>雅黑渲染没问题，华文黑体在普通字号下惨不忍睹 &#8230; AA开关，hintnone/slight/medium/full都试，无改善。</p>
<p><img src="http://pic.yupoo.com/punkid/8811565ed0ca/h6ympn2c.jpg" alt="kde4-stheiti" width="431" height="348" border="0" /></p>
<ol>
<li>KDE4.12已经蛮稳定的了，UI很漂亮</li>
<li>Dolphin取代Konqueror是明智的选择，加上tab后的dolphin用起来很舒服</li>
<li>Amarok 2 beta2 &#8230; 绝对是个倒退! UI难看不说，细节打磨也是一塌糊涂，iPod删歌居然要一首首的删除，新的树形菜单也很不friendly</li>
<li>Win键没法映射</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/10/20/stheiti-isnt-properly-rendered-on-kde4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Use gentoo-bashrc under Archlinux</title>
		<link>http://blog.punkid.org/2008/08/23/use-gentoo-bashrc-under-archlinux/</link>
		<comments>http://blog.punkid.org/2008/08/23/use-gentoo-bashrc-under-archlinux/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 14:18:03 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[bashrc]]></category>
		<category><![CDATA[gentoo]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=235</guid>
		<description><![CDATA[为什么说Gentoo是最好用的linux distro了呢? 一个小小的.bashrc就包含了许多很人性化的设置，省去了很多自己手动配置的烦恼。 Archlinux用户们$ yaourt gentoo-bashrc吧，然后把/usr/share/gentoo-bashrc/bashrc复制到$HOME下。]]></description>
			<content:encoded><![CDATA[<p>为什么说Gentoo是最好用的linux distro了呢? 一个小小的<code>.bashrc</code>就包含了许多很人性化的设置，省去了很多自己手动配置的烦恼。</p>
<p>Archlinux用户们<code>$ yaourt gentoo-bashrc</code>吧，然后把<code>/usr/share/gentoo-bashrc/bashrc</code>复制到<code>$HOME</code>下。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/08/23/use-gentoo-bashrc-under-archlinux/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>在Archlinux下编译TuxOnIce内核</title>
		<link>http://blog.punkid.org/2008/08/14/compile-tuxonice-kernel-in-archlinux/</link>
		<comments>http://blog.punkid.org/2008/08/14/compile-tuxonice-kernel-in-archlinux/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 13:01:53 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[TuxOnIce]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=225</guid>
		<description><![CDATA[经Druggo的介绍，一直在我的Genbox (我的Gentoo机器名)下使用TuxOnIce内核。现在在家里的Montty (我的Archlinux机器名)下实在觉得Archlinux的预编译内核太大了，而且全部以模块方式加载启动系统时的Loading Udev Events要花去尽20秒，难以忍受。很有必要自己编译一个精简的内核，而Archlinux的AUR里正好有TuxOnIce的PKGBUILD。 先说下为什么在Archlinux下自己编译一个TuxOnIce内核: 精简内核，去掉不需要的模块，减少启动时间 AUR里的TuxOnIce打了Gentoo的内核补丁集 TuxOnIce支持休眠到swap，充分利用绰绰有余的swap空间 支持断电休眠，重新唤醒系统速度快，免去重启烦恼 步骤 先用$ yaourt kernel26-ice获取TuxOnIce的PKGBUILD，它会提示是否修改PKGBUILD文件。我打算自己配置内核选项，所以去掉PKGBUILD里那句make menuconfig的注释。 # use menuconfig, if you want to change the configuration make menuconfig yes "" &#124; make config 然后Y下去，直到出现内核配置界面。我偏向于把东西编译内核，而不是编译为模块，这样做的好处是根本不用去管该手动加载哪些模块，哪些是需要的。为了让Suspend功能运转，需要把勾选以下设置。 Power management options (ACPI, APM) ---&#62; [*] Hibernation (aka 'suspend to disk') (/dev/&#60;swap-partition&#62;) Default resume partition &#60;*&#62; Enhanced Hibernation (TuxOnIce) ---&#62; --- [...]]]></description>
			<content:encoded><![CDATA[<p>经<a href="http://blog.druggo.net/index.php?post/2008/05/01/TuxOnIce" title="TuxOnIce! 休眠到硬盘!">Druggo</a>的介绍，一直在我的Genbox (我的Gentoo机器名)下使用<a href="http://www.tuxonice.net/" title="TuxOnIce">TuxOnIce</a>内核。现在在家里的Montty (我的Archlinux机器名)下实在觉得Archlinux的预编译内核太大了，而且全部以模块方式加载启动系统时的Loading Udev Events要花去尽20秒，难以忍受。很有必要自己编译一个精简的内核，而Archlinux的AUR里正好有<a href="http://aur.archlinux.org/packages.php?ID=15224" title="kernel26-ice in AUR">TuxOnIce</a>的PKGBUILD。</p>
<p>先说下为什么在Archlinux下自己编译一个TuxOnIce内核:</p>
<ol>
<li>精简内核，去掉不需要的模块，减少启动时间</li>
<li>AUR里的TuxOnIce打了Gentoo的内核补丁集</li>
<li>TuxOnIce支持休眠到swap，充分利用绰绰有余的swap空间</li>
<li>支持断电休眠，重新唤醒系统速度快，免去重启烦恼</li>
</ol>
<p><span id="more-225"></span></p>
<h3>步骤</h3>
<p>先用<code>$ yaourt kernel26-ice</code>获取TuxOnIce的PKGBUILD，它会提示是否修改PKGBUILD文件。我打算自己配置内核选项，所以去掉PKGBUILD里那句<code>make menuconfig</code>的注释。</p>
<pre lang="bash">
# use menuconfig, if you want to change the configuration
make menuconfig
yes "" | make config
</pre>
<p>然后Y下去，直到出现内核配置界面。我偏向于把东西编译内核，而不是编译为模块，这样做的好处是根本不用去管该手动加载哪些模块，哪些是需要的。为了让Suspend功能运转，需要把勾选以下设置。</p>
<pre lang="bash">
 Power management options (ACPI, APM)  ---&gt;
   [*] Hibernation (aka 'suspend to disk')
   (/dev/&lt;swap-partition&gt;) Default resume partition
   &lt;*&gt;   Enhanced Hibernation (TuxOnIce)  ---&gt;
     ---   Image Storage (you need at least one allocator)
     &lt;*&gt;   File Allocator
     &lt;*&gt;   Swap Allocator
     ---   General Options
     &lt;*&gt;   Compression support
     &lt;*&gt;   Userspace User Interface support
     (/sbin/tuxoniceui_text) Default userui program location
     [ ]   Allow Keep Image Mode
     [*]   Replace swsusp by default
     &lt; &gt;   Cluster support  ---&gt;
     [*]   Checksum pageset2
     (25)  Default waiting time for emergency boot messages
     &lt; &gt;   Test pageflags
 Cryptographic options  ---&gt;
   &lt;*&gt;   LZF compression algorithm
</pre>
<p>其中<code>/dev/&lt;swap-partition&gt;</code>为swap分区位置，开启LZF压缩可以加快休眠/唤醒速度，不过需要耗费点CPU资源。怕啥，我PIII 667Mhz的老爷机都用上它了。</p>
<p>用多核CPU的还需要勾选这些 (与我无关)</p>
<pre lang="bash">
Kernels before 2.6.22

Processor type and features  ---&gt;
 [*] Support for hot-pluggable CPUs (EXPERIMENTAL)

Kernel 2.6.22 and after:

Processor type and features  ---&gt;
 [*] Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)
</pre>
<p>修改好config后等它自动编译吧，然后运行<code>$ sudo pacman -U kernel26-ice-2.6.26-3-i686.pkg.tar.gz</code>安装内核，其间会运行<code>mkinitcpio</code>生成initramfs，无所谓。反正都编译进kernel了，而且又是自己手动编译的，根本不需要initramfs。</p>
<p>完成后添加类似几行到<code>/boot/grub/menu.1st</code>:</p>
<pre lang="bash">
title  Arch Linux TuxOnIce
root   (hd1,0)
kernel /vmlinuz26-ice root=/dev/sdb3 ro
</pre>
<p>其中<code>(hd1,0)</code>指的是<code>/boot</code>分区，<code>/dev/sdb3</code>是<code>/</code> 分区。</p>
<p>我用的是N卡，还需要去AUR下个<code>nvidia-96xx-ice</code>的显卡驱动 (我的还是GeForce 2系列的卡)。<code>$ yaourt nvidia-96xx-ice</code>或者<code>$ yaourt nvidia-ice</code>就是了。</p>
<p>要用Suspend功能，还需要<code>$ yaourt hibernate-script</code>。然后修改<code>/etc/hibernate/blacklisted-modules</code>，把<code>nvidia</code>这行注释了，不然hibernate会报错。</p>
<p>在<code>/etc/hibernate/common.conf</code>里找到这几行，去掉注释，以便在休眠时断开网络，唤醒时重新连接。</p>
<pre lang="bash">
### network
DownInterfaces eth0
UpInterfaces auto
</pre>
<p>我用的是Nvidia的GeForce 2的卡，还需要在<code>/etc/X11/xorg.conf</code>里的Device Section里添加一句<code>Option "NvAGP" "1"</code>，如下:</p>
<pre lang="bash">
Section "Device"
        Identifier  "Card0"
        Driver      "nvidia"
        VendorName  "nVidia Corporation"
        BoardName   "NV11 [GeForce2 MX/MX 400]"
        BusID       "PCI:1:0:0"
        Option      "NvAGP" "1"
        ...
EndSection
</pre>
<p>最后在<code>/etc/rc.conf</code>里检查下<code>MODULES</code>这行，把不需要的模块都清除掉，因为我是全部编进了kernel，直接将此行留空。</p>
<p>全部搞定后重启进入新的TuxOnIce内核吧，<del datetime="2008-08-15T15:23:54+00:00">我的Loading Udev Events时间由20秒缩短为7秒了(还是很不爽啊! Gentoo多快啊!)</del>再次重编，Udev Events Loading缩短为4秒了，总算比较可以忍受了，运行<code>$ sudo hibernate -n</code>进行休眠测试，没问题的话以后就<code>$ sudo hibernate</code>进行休眠吧。唤醒的话正常开机由grub引导进入就行了。</p>
<h3>参考</h3>
<ul>
<li><a href="http://gentoo-wiki.com/TuxOnIce" title="TuxOnIce -  Gentoo Linux Wiki">TuxOnIce &#8211;  Gentoo Linux Wiki</a></li>
<li><a href="http://wiki.archlinux.org/index.php/Suspend_to_Disk#Tuxonice_method" title="Suspend to Disk">Suspend to Disk : Tuxonice method &#8211; Arch Wiki</a></li>
</ul>
<p>最后抱怨几句:</p>
<p>为什么Archlinux要把kde3赶出repo，kde4还不足够稳定到给广大用户使用吧。像Gentoo那样用不同的slot机制来并存kde3和kde4多好。</p>
<p>Archlinux的源很痛苦，ABS的rsync服务器更是痛苦&#8230;</p>
<p>尽管有官方预编译包，我还是需要自己去手动编译那些软件，scim就是其一。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/08/14/compile-tuxonice-kernel-in-archlinux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

