作为一名高清爱好者,一直想配置一台HTPC放家里实现高清播放外加家庭服务器功能。Nvidia的Ion平台自然是高清平台的硬件首选,而家庭媒体中心的软件端则首先考虑开发的已经很成熟的开源利器XBMC。XBMC本身支持多种平台(Linux, Mac OS X, Windows …),从驱动程序和配置方面来说,自然是基于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输出、多合一读卡槽

除了买的主机自带了鼠标键盘之外,我还选购了HDMI高清线以及MCE遥控器。

系统方面选择了安装配置简便的Ubuntu 10.10系统(我开始是打算使用Gentoo的,但是编译着编译着我就崩溃鸟)。使用Ubuntu要实现的功能如下:

  1. 实现XBMC完全管理影音库,并通过HDMI输出到家里46吋的电视机
  2. 通过无线网络连接家庭路由器,尽量摆脱网线的束缚
  3. 开启sshd,通过其他电脑或者手机ssh到家庭媒体主机进行系统维护操作
  4. 开启transmission-daemon,利用该主机进行高清下载,并可远程控制Bittorrent下载
  5. 实现开机自动进入媒体中心,用遥控器进行媒体播放操作,避免使用键鼠的可能

系统安装

因为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	xfs	noatime,nodiratime,allocsize=512m	0	2

其中allocsize=512m的作用是每次写入文件时xfs分区会预先分配512Mb的空间供一次写入,以减少文件碎片。对于动辄数G的高清文件来说,512Mb不算大支。

系统调试

删除冗余组件

安装好系统之后首先运行sudo apt-get update更新源。然后删除一些不必要的自带软件,如Openoffice, Evolution Mail, Brasero等。具体看个人需要删除,例如要删除Openoffice,运行sudo apt-get autoclean openoffice.org进行完全清理。

解决RaLink RT3090网卡驱动问题

Ubuntu 10.10自带的无线网卡RaLink RT3090驱动存在不能正常关机的问题,需要安装第三方源的编译包,运行如下命令:

## 添加第三方驱动源
sudo add-apt-repository ppa:markus-tisoft/rt3090

## 更新源信息并安装第三方无线网卡驱动
sudo apt-get update
sudo apt-get install rt3090-dkms

编辑/etc/modprobe.d/blacklist.conf文件,添加如下几行,将系统自带驱动模块加入黑名单:

# blacklist other Ralink modules in favour of 3090 DKMS mod
blacklist rt2860sta
blacklist rt2870sta
blacklist rt2800pci
blacklist rt2800usb
blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2x00usb

安装NVidia驱动

为了充分发挥Ion平台的高清硬解效能,安装NVidia的私有驱动是必须的。运行sudo apt-get install nvidia-current安装好驱动程序。安装好的XBMC会出现明显的CPU占用率过高的问题,解决的办法时安装好NVidia的驱动之后,编辑/etc/X11/xorg.conf文件,加入NoFlip设置:

Section "Device"
	Identifier		"Device0"
	Driver			"nvidia"
	VendorName	"NVIDIA Corporation"
	BoardName		"ION"
	Option		"NoFlip" "1" # 加入此行
EndSection

调试HDMI的音频输出

Ubuntu下调试音频的HDMI输出有点复杂,具体我参考了HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240进行调试,这里简述下我的调试过程:

  1. 运行alsamixer,F6切换到HDA NVidia声卡输出,打开Master, PCM, Front, Mic, S/PDIF, S/PDIF Def。
  2. 编辑/etc/modprobe.d/sound.conf,加入以下这行:
    options snd-hda-intel enable_msi=0 probe_mask=0xffff,0xfff2
    
  3. 编辑/etc/pulse/default.pa,加入以下这行:
    load-module module-alsa-sink device=hw:1,3
    
  4. 编辑/etc/asound.conf,加入以下几行:
    #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"
    }
    

开启iptables+ssh

由于本机是通过无线路由连接,最好先在路由器上映射好相应端口并绑定一个固定IP以方便维护,在此不再冗述。既然系统已经搭建好了,可以去掉键鼠通过开启sshd服务进行远程操作维护。为了更安全的系统,iptables+sshguard也是不可或缺的。

运行命令安装iptables, ssh和sshguard:

sudo apt-get install iptables openssh-server sshguard

修改/etc/ssh/sshd_config

Port 2727 # 将默认的22端口修改为任意其他端口,例如2727。

然后是设置iptables规则,编辑/etc/iptables (没有可新建):

# 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

然后直接运行sudo iptables-restore < /etc/iptables导入iptables设置。悲剧的是,Ubuntu不会自动保存iptables设置,所以必须在开机时载入设置,编辑/etc/network/interfaces文件,在末尾加入以下两行:

pre-up iptables-restore < /etc/iptables
post-down iptables-save > /etc/iptables

运行sudo apt-get install rcconf并通过rcconf将ssh加入系统启动自运行进程。然后重启电脑,就可以通过其他主机来进行操作、维护了。

安装XBMC及相关组件

安装XBMC

要获得XBMC之前,我们先需要添加第三方源,运行如下命令完成XBMC安装:

sudo add-apt-repository ppa:team-xbmc
sudo apt-get update
sudo apt-get install xbmc xbmc-standalone

首次运行XBMC会发现中文无法识别的问题,需要做的是拷贝一个中文字体进来,例如我喜欢使用Google制造的Droid Sans Fallback字体,运行:

sudo cp DroidSansFallback.ttf /usr/share/xbmc/media/Fonts/arial.ttf
sed -e "s/language>english<\/language/language>Chinese (Simple)<\/language/" -i ~/.xbmc/userdata/guisettings.xml
sed -e "s/font>Default<\/font/font>Arial<\/font/" -i ~/.xbmc/userdata/guisettings.xml

安装Lirc实现遥控播放XBMC

作为HTPC的一部分,脱离键鼠使用遥控器进行影院播放控制自然是必不可少,我使用的是Microsoft Media Center的遥控器,通过USB外接一个红外线接收器就可以了。

要让遥控器工作,首先得安装lirc,运行sudo apt-get install lirc完成安装,首次安装完成会弹出遥控器的终端配置界面:

  • 在Remote Control Configuration中选择Windows Media Center Transceivers/Remotes (all)
  • 在IR transmitter, if present中均选择Microsoft Windows Media Center V2 (usb) : Direct TV Receiver

然后将lircd加入系统自启动进程,重启计算机,在终端中运行irw,摁遥控器的方向键进行测试,如果终端内能正确识别遥控器操作说明遥控器准备就绪了。如果无法识别的话,需要sudo dpkg-reconfigure lirc重启进行配置,或者就是遥控器的电池电力不足(我就是因为这个傻逼原因瞎折腾了系统两个多小时)。

安装Transmission-daemon

作为高清下载机,实现Bittorrent下载的远程管理是必不可少的,首选Transmission这个跨平台的Bittorrent下载利器,尤其是它的daemon模式,支持web远程操作,而且web端的操作针对iPhone等手持设备做了UI优化。运行sudo apt-get install transmission-daemon安装。按照网站上的设置说明更改settings.json文件配置。

由于transmission-daemon默认使用的是debian-transmission用户名运行,需要将其改为我的用户名xbmc进行更好的管理。修改/etc/init.d/transmission-daemon文件:

#USER=debian-transmission #注释此行,修改为自定义的用户名
USER=xbmc

安装XBMC插件

XBMC的强大之处在于可以通过插件进行无限扩展,我安装了Getlib, 7176, TheMovieDb几个电影类的削刮器以根据文件名自动获取电影的封面和制作信息。剧集方面安装了TheTVDb的削刮器,另外还可以安装xbmc-addons-chinese里的扩展,添加Youku等在线视频播放,更好地扩展网络电视功能。

此外,在XBMC下可安装Transmission的插件,便可通过XBMC监控Transmission下载,例图:

Transmission Via XBMC

安装XBMC皮肤: Aeon Nox

XBMC下最漂亮的皮肤莫过于Aeon系列,Aeon下面有Aeon65, Aeon MQ2和Aeon Nox三个mod。个人更偏向于使用Aeon Nox,系统资源占用少于前二者且皮肤功能异常强大,整个UI也非常漂亮(见下文“截图欣赏”)。

安装方法很简单,去XBMC的扩展库里找到Aeon Nox安装就行了,下载过程可能有点慢,毕竟这个皮肤解压后的体积高达60MB。不过皮肤安装后的问题是缺少中文字体支持,解决方法是:

复制一个中文字体到~/.xbmc/addons/skin.aeon.nox/fonts目录,并重命名为Arial.ttf(简单起见)。

然后修改~/.xbmc/addons/skin.aeon.nox/720p/Font.xml文件,将filename中的字体全部替换为Arial.ttf。

优化系统设置

为了更好地实现HTPC的流畅体验,还需要对安装后的系统进行一些优化。

  1. 设置开机免密码自动登录XBMC账户
    在System -> Administration -> Login Screen Settings中点击Unlock,设置XBMC账户为自动登录。
  2. 设置XBMC关机功能
    在XBMC的系统设置中的省电模式里,将自动关机功能中的选项设置为关机,这样既可通过摁遥控器上的关机键实现关机。

整个系统优化完之后,就可以在GDM中选择默认登录xbmc-standalone环境,而不进入Gnome桌面环境,以节省不必要的系统资源占用。

截图欣赏

screenshot011

screenshot001

screenshot000

Movie Up

screenshot000

screenshot001

screenshot003

screenshot005

参考:

  1. HOW-TO perform a miminal Ubuntu and XBMC install on a Asus EeeBox PC EB1501
  2. HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240
  3. Setting up Ubuntu 10.10 on Revo 3700
  4. XBMC 10.04 + 高清硬解的中文设置

End

写在最后,我已经为我的HTPC新添置了一块Seagate的GoFlex Desk 2TB移动硬盘以满足我下高清的需求,Acer的R3700主机连续运行几天既不会有噪音也没有发热的现象。电脑之间,电脑与手机之间通过无线网络进行互联,一定要用上801.11n的无线路由器才能满足无线网络之间的数据高速传输。

17 Reponses So Far ↓

  1. Druggo:

    太给力了,我也好像搞一个。。

  2. hermy:

    你,你居然更新了!!

  3. pwcpp:

    请问samba的共享速度可以达到多少?

  4. punkid:

    取决于你的路由器带宽。

  5. playtherens:

    博主您好,我现在遇到的这个问题搞的我十分崩溃,所以向您求教。。。
    我在安装了Ubuntu10.04之后在电脑上安装了XBMC,但是一直不能播放视频,一开视频就会自动退出程序,有时还会在主文件夹下生成一个crash报告。然后我锲而不舍的安装了一些扩展,发现XBMC可以听网络收音机了,但是依然不能视频,网络视频也是一打开就程序崩溃。我的显卡是ATI Mobility Radeon HD 5470,是硬件或者驱动不支持吗?
    然后,有一次我在听收音机的时候我强制退出了,这下悲催了,在打开音乐选项的时候里面什么都没有了,音乐目录,音乐扩展什么都没了……现在只能用来看天气了 = =
    我尝试在Ubuntu里面卸载重装,发现XBCM里面的设置都没有变,应该是我没有删除用户数据,自然音乐文件夹还是空空荡荡……
    我该怎么办T_T

  6. punkid:

    @playtherens 你可以尝试mv ~/.xbmc ~/xbmc.bak备份你的xbmc用户数据,然后在重新运行xbmc试下,如果只是播放视频出问题的话很有可能是ATI驱动程序的问题。建议去xbmc官方论坛里搜索下解决方法。

  7. playtherens:

    我已经弄好了呢~谢谢啦~
    不能播放的问题在把渲染方式改成软件之后就好了。我是看一个德文帖子这么建议的……
    不过就是看rmvb的时候卡卡的,用什么smplayer就很正常,这是解码的原因吗?
    刚搞这个Ubuntu,虽然头大但是也很有乐趣,希望以后也能像博主一样搞这么个大工程,哈哈~
    在此谢过~

  8. punkid:

    XBMC用的是内置的解码器,没有调用系统的。玩Linux最怕用的就是A卡了。

  9. playtherens:

    好像玩什么A卡都吃力……
    之前在PC上玩鬼泣说是只支持N卡T_T

  10. Nob0dy:

    楼主太给力了,以后也跟着搞一个,到时候搞好了再来报到…先收藏了……

  11. 那里达人秀:

    @playtherens 你可以尝试mv ~/.xbmc ~/xbmc.bak备份你的xbmc用户数据,然后在重新运行xbmc试下,如果只是播放视频出问题的话很有可能是ATI驱动程序的问题。

  12. CONEY:

    Jason Marz 和喜欢他的歌曲;
    这个家庭影院系统不错嚒,和我的构思很相似。。。

  13. AH:

    原来我们寝室进哥那么牛。。。

  14. guest:

    进入 XBMC,菜单 System -> Appearance -> Skin -> Fonts -> 选择 Arial based,再改中文界面,就不需弄字体了。

  15. plutosherry:

    我最近研究的是openelec,但似乎很多命令都没有,估计是简化了的缘故。导致无法识别Intel 2495ABG的无线网卡。驱动也装不上。郁闷,希望求解。。。

  16. iPUNKID:

    你莫非用的是Raspberry Pi?驱动跟kernel有关,自己编译个就是了。不过这样一来的话你又得装好gcc, glibc这些开发套件,还不如自己装个archlinux得了。

Leave a Reply ↓