作为一名高清爱好者,一直想配置一台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要实现的功能如下:
- 实现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 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进行调试,这里简述下我的调试过程:
- 运行
alsamixer
,F6切换到HDA NVidia声卡输出,打开Master, PCM, Front, Mic, S/PDIF, S/PDIF Def。 - 编辑
/etc/modprobe.d/sound.conf
,加入以下这行:options snd-hda-intel enable_msi=0 probe_mask=0xffff,0xfff2
- 编辑
/etc/pulse/default.pa
,加入以下这行:load-module module-alsa-sink device=hw:1,3
- 编辑
/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下载,例图:
安装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的流畅体验,还需要对安装后的系统进行一些优化。
- 设置开机免密码自动登录XBMC账户
在System -> Administration -> Login Screen Settings中点击Unlock,设置XBMC账户为自动登录。 - 设置XBMC关机功能
在XBMC的系统设置中的省电模式里,将自动关机功能中的选项设置为关机,这样既可通过摁遥控器上的关机键实现关机。
整个系统优化完之后,就可以在GDM中选择默认登录xbmc-standalone环境,而不进入Gnome桌面环境,以节省不必要的系统资源占用。
截图欣赏
参考:
- HOW-TO perform a miminal Ubuntu and XBMC install on a Asus EeeBox PC EB1501
- HOW-TO set up HDMI audio on nVidia GeForce G210, GT220, or GT240
- Setting up Ubuntu 10.10 on Revo 3700
- XBMC 10.04 + 高清硬解的中文设置
End
写在最后,我已经为我的HTPC新添置了一块Seagate的GoFlex Desk 2TB移动硬盘以满足我下高清的需求,Acer的R3700主机连续运行几天既不会有噪音也没有发热的现象。电脑之间,电脑与手机之间通过无线网络进行互联,一定要用上801.11n的无线路由器才能满足无线网络之间的数据高速传输。
太给力了,我也好像搞一个。。
你,你居然更新了!!
请问samba的共享速度可以达到多少?
取决于你的路由器带宽。
博主您好,我现在遇到的这个问题搞的我十分崩溃,所以向您求教。。。
我在安装了Ubuntu10.04之后在电脑上安装了XBMC,但是一直不能播放视频,一开视频就会自动退出程序,有时还会在主文件夹下生成一个crash报告。然后我锲而不舍的安装了一些扩展,发现XBMC可以听网络收音机了,但是依然不能视频,网络视频也是一打开就程序崩溃。我的显卡是ATI Mobility Radeon HD 5470,是硬件或者驱动不支持吗?
然后,有一次我在听收音机的时候我强制退出了,这下悲催了,在打开音乐选项的时候里面什么都没有了,音乐目录,音乐扩展什么都没了……现在只能用来看天气了 = =
我尝试在Ubuntu里面卸载重装,发现XBCM里面的设置都没有变,应该是我没有删除用户数据,自然音乐文件夹还是空空荡荡……
我该怎么办T_T
@playtherens 你可以尝试
mv ~/.xbmc ~/xbmc.bak
备份你的xbmc用户数据,然后在重新运行xbmc试下,如果只是播放视频出问题的话很有可能是ATI驱动程序的问题。建议去xbmc官方论坛里搜索下解决方法。我已经弄好了呢~谢谢啦~
不能播放的问题在把渲染方式改成软件之后就好了。我是看一个德文帖子这么建议的……
不过就是看rmvb的时候卡卡的,用什么smplayer就很正常,这是解码的原因吗?
刚搞这个Ubuntu,虽然头大但是也很有乐趣,希望以后也能像博主一样搞这么个大工程,哈哈~
在此谢过~
XBMC用的是内置的解码器,没有调用系统的。玩Linux最怕用的就是A卡了。
好像玩什么A卡都吃力……
之前在PC上玩鬼泣说是只支持N卡T_T
楼主太给力了,以后也跟着搞一个,到时候搞好了再来报到…先收藏了……
@playtherens 你可以尝试mv ~/.xbmc ~/xbmc.bak备份你的xbmc用户数据,然后在重新运行xbmc试下,如果只是播放视频出问题的话很有可能是ATI驱动程序的问题。
太给力了 支持下!!!
Jason Marz 和喜欢他的歌曲;
这个家庭影院系统不错嚒,和我的构思很相似。。。
原来我们寝室进哥那么牛。。。
进入 XBMC,菜单 System -> Appearance -> Skin -> Fonts -> 选择 Arial based,再改中文界面,就不需弄字体了。
我最近研究的是openelec,但似乎很多命令都没有,估计是简化了的缘故。导致无法识别Intel 2495ABG的无线网卡。驱动也装不上。郁闷,希望求解。。。
你莫非用的是Raspberry Pi?驱动跟kernel有关,自己编译个就是了。不过这样一来的话你又得装好gcc, glibc这些开发套件,还不如自己装个archlinux得了。