打造基于Ubuntu+XBMC的家庭媒体中心

作为一名高清爱好者,一直想配置一台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下载,例图:

技术分享

安装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桌面环境,以节省不必要的系统资源占用。

截图欣赏

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

参考:

  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的无线路由器才能满足无线网络之间的数据高速传输。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。