分类 Volumio 下的文章

文章更新

20170308 初次成文

问题简述

在之前的文章中:

树莓派折腾记:打造HiFi解码转盘(基于Volumio和Dac扩展板)

小苏特意提到了不要给Volumio执行upgrade操作,即使你这么做了,你也无法升级成功。但是由于Volumio基于Raspbian(基于Debian基于Linux),大多数用户不是很清楚"Volumio不能执行系统升级操作",当他们习惯了Linux的操作模式后,便不可避免地在Volumio执行了apt-get upgrade操作。这样问题就产生了,在升级过程中会造成升级失败和升级中断,并报出类似错误(以下简称错误1):

Unpacking systemd (215-17+deb8u5) over (215-17+deb8u4) ...
dpkg: error processing archive /var/cache/apt/archives/systemd_215-17+deb8u5_armhf.deb (--unpack):
trying to overwrite '/usr/share/dbus-1/system-services/org.freedesktop.systemd1.service', which is also in package systemd-shim 9-1
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
addgroup: The group `systemd-journal' already exists as a system group. Exiting.
Processing triggers for dbus (1.8.20-0+deb8u1) ...
Errors were encountered while processing:
 /var/cache/apt/archives/systemd_215-17+deb8u5_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

在此次升级报错之后就再也无法用apt-get安装任何软件包了,当使用apt-get安装其他软件包时,会报出类似错误(以下简称错误2):

You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
libpam-systemd : Depends: systemd (= 215-17+deb8u6) but 215-17+deb8u5 is to be installed
libpam-systemd : Depends: systemd-sysv (= 215-17+deb8u6) but 215-17+deb8u5 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

刚在SD卡中烧写好Volumio的时候,小苏就因为在不知情的情况下执行了apt-get upgrade操作,导致将Volumio恢复了一次默认设置(所有用户数据都会被清除,系统会恢复到刚刚烧写好系统的状态),恢复默认设置之后就再也不敢升级了。但是依小苏的观点,对于Linux来说,不能进行升级是很不爽的(在安装软件时总是会提示"65 not graduated"),在强迫症和好奇心的驱使下,昨天晚上小苏不顾SD卡中的近9G,800多首音乐文件和各种已经折腾成功的劳动成果,又执行了这个神奇的命令:

sudo apt-get upgrade

结果可想而知,升级过程中又报错了,并且又出现了"任何软件包都无法安装"的错误。

于是根据报错信息执行:

sudo apt-get -f install

结果还是提示"错误2"(在这种情况下加"-f"参数好像并没有用~因为在第一次小苏把系统弄成这样之后也执行过这条命令,如果有用的话小苏也不会恢复默认设置了~)。不得已只好又去谷歌了。

解决方案

意料之中,又出现到一堆英文搜索结果,在第一页,第一条搜索结果中意外看到了在Volumio官方社区中有一位用户和我的情况非常相似,也是因为在不知情的情况下升级了系统,最终导致无法安装vim,抱着一丝希望往下翻回帖,终于在17楼发现了解决方法,并且是3月1号,也就是一周前才回的帖子:

170308-101606.jpeg

他的做法是,在Debian的官方软件源服务器中下载错误中"未满足依赖关系"版本的软件包到本地,然后执行dpkg -i --force-overwrite强制安装此包,具体到我上面报出的错误,我的解决方法是这样的:

由于"systemd"和"systemd-sysv"的版本过旧(215-17+deb8u5),不满足包"libpam-systemd"的依赖关系,所以我需要在Debian的官方软件源中下载"systemd"和"systemd-sysv"且版本都为"215-17+deb8u6"的这两个软件包:

wget http://ftp.de.debian.org/debian/pool/main/s/systemd/systemd_215-17+deb8u6_armhf.deb
wget http://ftp.de.debian.org/debian/pool/main/s/systemd/systemd-sysv_215-17+deb8u6_armhf.deb

下载完成后,使用dpkg命令强制安装这两个包:

sudo dpkg -i --force-overwrite systemd_215-17+deb8u6_armhf.deb
sudo dpkg -i --force-overwrite systemd-sysv_215-17+deb8u6_armhf.deb

安装过程中可能会报warning,安装完成后进行更新软件源索引和升级操作,在升级过程中,如果遇到Cannot remove file: "Structure needs cleaning"错误的话,重启系统再次更新软件源索引和系统升级:

sudo apt-get update
sudo apt-get upgrade

不出意外的话,此次所有软件包都会被升级成功且不会报任何错误。当你再使用apt-get安装软件包时,也不会报错,并且目前来说,Volumio的各个功能都没有受到影响。

但小苏仍然需要强调,如非必要,不要给Volumio执行upgrade操作,虽然执行升级操作后出现的错误能用以上方法解决,但是毕竟官方不建议咱们升级,咱就别升啦。

参考资料

Can't install vim : Volumio 2 Pi 3 - volumio.org:
https://volumio.org/forum/can-install-vim-volumio-t4167.html

文章更新:
20170304 初次成文

问题提出:

虽然适用于Linux系统的网易云音乐PC客户端已经在网易云音乐官网上架(仅适用于深度和Ubuntu系统),但因为我们的树莓派是Arm架构,所以专为PCLinux开发的客户端是不能在我们小小的树莓派上跑的。好在Github上有大神搞出了基于Python的网易云音乐命令行版本NetEase-MusicBox(以下简称MusicBox):

项目地址:
https://github.com/darknessomi/musicbox

庆幸的是,MusicBox是可以完美运行在树莓派的Raspbian上并可以通过树莓派板载的3.5mm插口将声音信号输出的。这也为我们小小的树莓派增加了更多的可玩性(比如可以为家庭音响系统提供在线音源等)。

在上一篇文章中:

玩转Volumio的DLNA特性

小苏介绍了在Volumio上DLNA特性的几种使用姿势,但是唯独没有提到网易云音乐的DLNA特性。这是因为由于Android版网易云音乐对DLNA的兼容性原因,无法正常通过DLNA将音乐推送到Volumio中播放。但是通过BubbleUPnp或者AllCast却可以正常推送并播放音乐。但小苏又是个网易云音乐的重度用户,所以小苏就琢磨着能不能把MusicBox搞到Volumio上,这样就可以将音乐通过Dac扩展板解码后输出了(因为在Raspbian上MusicBox虽然是可以正常工作,但自带的3.5mm插口是有一些杂音的)~

但是这个问题却折磨了小苏很久,因为Volumio基于Raspbian,所以命令行的网易云音乐是可以安装和运行的,但是音频信号输出却有点问题:

  1. 不论音乐是否在播放,树莓派板载的3.5mm插口都会输出超大音量的杂音信号;
  2. 当音乐正在播放时,Dac扩展板上的3.5mm插口听不到任何声音。

这就非常蛋疼了,虽然MusicBox可以运行,但是无法输出音频信号MusicBox也属于摆设了。

解决方案:

经过小苏的锲而不舍夜以继日的的折腾,终于解决了这个问题。折腾步骤如下:

  1. 安装MusicBox:

我们使用pip安装MusicBox,因为Volumio默认是没有部署Python环境的,所以在安装pip的时候apt包管理器会"顺便"帮我们部署好Python环境。

sudo apt-get install python-pip #安装pip包管理器及其依赖组件
sudo pip install NetEase-MusicBox #使用pip安装MusicBox
sudo apt-get install mpg123 #安装mp3解码器


2. 测试MusicBox:

MusicBox安装完成后,在终端中执行:

musicbox #(无需sudo)

即可进入命令行版网易云音乐的界面。但如果你看到的界面只有字母和数字,而没有汉字的话你需要进行以下操作(如果显示没有问题则可以跳过这一步):

cd ~ #切换到用户主目录
vim .bashrc #编辑bash配置文件

在.bashrc中,在文件末尾另起一行,加入以下内容:

# Locale Settings
export LC_CTYPE=en_US.UTF-8

值得一提的是,Volumio的默认Shell是bash,如果你之前更换过Shell,那么你需要在~下找到你当前使用的Shell对应的配置文件来修改。

保存之后退出当前SSH会话并重新登录(无需重启),重新执行musicbox后应该恢复正常了:

Screenshot_20170304-125910.png

在Raspbian下,到这一步MusicBox就配置完成了。如果实在Volumio下,还需要进行屏蔽板载声卡的操作。

  1. 屏蔽板载声卡:

终端执行:

sudo vim /boot/config.txt

在其中找到这一行:

dtparam=audio=on 

在这一行前加上#号注释掉:

# dtparam=audio=on 

修改完成后保存,接着我们修改另一个文件:

sudo vim /etc/asound.conf

此文件在默认情况下应该是一个空白文件,将以下内容填入此文件:

pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}

修改完成后,保存并重启系统。重启完成后,在终端执行:

aplay -l

终端应该会返回以下结果:

**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dacplus], device 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

我们发现执行结果中只存在HiFiBerry一个声卡,说明我们屏蔽板载声卡的操作成功(在未屏蔽状态下执行aplay -l后,返回结果中应该有3.5mm,HDMI和HiFiBerry三个声卡)。

接着进入MusicBox,播放一首音乐,如果还是听不到音乐的话按"="键即可增大音量,不出意外的话,音乐可以正常播放了~

Screenshot_20170304-132410.png

参考资料:

NetEase-MusicBox项目:
https://github.com/darknessomi/musicbox

全新配置 HiFiBox DAC + Volumio 系统:
http://shumeipai.nxez.com/2016/12/04/configuring-volumio-155-for-hifibox-dac.html

文章更新:
20170301 初次成文

问题提出:
由于树莓派3代板载无线模块,而树莓派2代也可以通过连接USB无线网卡或者直插网线实现网络通信,又因为Volumio搭载在树莓派上,所以在Volumio的早期版本就实现了UPNP/DLNA特性。通过此特性,在局域网中"遥控"Volumio成为了可能。

在这篇文章中,小苏将为大家介绍一下如何多角度玩转Volumio的DLNA特性,看完这篇文章后,你一定会感受DLNA技术为我们带来的便利。

准备工作:
硬件环境:

  1. 装有Dac扩展板,烧写好Volumio系统的的树莓派(小苏使用的是树莓派3代B型,Dac扩展板选用的是PiFi Dac+ v2.0);
  2. 路由器(因为在宿舍用嘛,所以小苏用的是斐讯K2);
  3. 安卓手机(这个随意)
  4. 网线,网卡等(可选)

软件环境:

  1. BubbleUPnp播放器(安卓应用)
  2. Volumio系统(烧写到树莓派的SD卡中)

在正文开始之前,小苏还需要介绍一下DLNA协议的功能模块:

Digital Media Server(DMS):服务器,简单来说就是媒体文件的提供者
Digital Media Renderer(DMR):渲染器,简单来说就是媒体文件的受控端和输出者
Digital Media Controller(DMC):控制器,简单来说就是控制端
Digital MediaPlayer(DMP):播放器(在本文章中此模块可忽略)
(以上资料来自百度百科)

解决方案:
先决条件:使手机与树莓派处在同一局域网下,如果你是Volumio1.x版本,那么你可能需要在WebUI中打开"UPNP/DLNA服务",从Volumio2开始,这项功能默认开启且无法关闭。

  1. 推送手机中的音乐文件到扩展板:
    (服务器:BubbleUPnp | 渲染器:Volumio | 控制器:BubbleUPnp)

在手机上打开BubbleUPnp播放器,划出侧边栏,"RENDERER"(渲染器)选择:"Volumio","LIBRARY"(媒体库)选择"Local and Cloud"。点击底栏中的"LIBRARY"后,你可以看到手机中的媒体文件,点击"Music"后可以进入音乐媒体库,之后就可以在音乐媒体库中选择相应的类别浏览并播放音乐了。在底栏的"PLAYLIST"标签中,你可以长按专辑封面图片上下拖动来调整播放列表的播放顺序,在"NOW PLAYING"标签中,你可以进行查看当前音乐的播放进度,控制音乐播放行为等操作。

Screenshot_20170301-204955.png

Screenshot_20170301-205632.png

Screenshot_20170301-210250.png

Screenshot_20170301-210309.png

  1. 推送Volumio中的音乐到手机:
    (服务器:MiniDLNA | 渲染器:BubbleUPnp | 控制器:BubbleUPnp)

由于Volumio基于Rasbain,所以我们可以在Volumio上安装DLNA服务器程序,由DLNA服务器提供媒体文件推送到其他设备上播放。在这个方案中,我们需要在Volumio中安装MiniDLNA程序作为DLNA服务器:

sudo apt-get install minidlna #安装MiniDLNA程序

MiniDLNA程序安装完成后,由于媒体文件目录未指定,我们还需要修改MiniDLNA的配置文件来指定媒体文件目录:

sudo cp /etc/minidlna.conf /etc/minidlna.conf.bak #备份MiniDLNA配置文件
sudo vim /etc/minidlna.conf #修改MiniDLNA配置文件

在这个文件中,我们可以找到以下内容:

# If you want to restrict a media_dir to a specific content type, you can
# prepend the directory name with a letter representing the type (A, P or V),# followed by a comma, as so:
#   * "A" for audio    (eg. media_dir=A,/var/lib/minidlna/music)
#   * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)
#   * "V" for video    (eg. media_dir=V,/var/lib/minidlna/videos)

因为我们需要推送树莓派SD卡中的"音频文件"到手机,所以我们在以上内容的下一行添加:

media_dir=A,/var/lib/mpd/music

其中/var/lib/mpd/music是Volumio的音乐库目录,这样配置可以使MiniDLNA扫描/data/INTERNAL/mnt/USB/mnt/NAS下的音乐文件。如果你的SD卡中有图片或者视频文件想要推送到其他设备,MiniDLNA同样可以做到,你只需要在这一行下面接着配置图片和视频文件的扫描目录即可。填写完成后,重启Volumio,打开浏览器,访问http://树莓派在局域网中的IP地址:8200,你可以看到MiniDLNA的工作状态,包括媒体库中的媒体文件数目,已连接设备的IP地址已经其Mac等(如果媒体文件较多的话,等待MiniDLNA扫描完成可能需要一段时间):

Screenshot_20170301-213444.png

以上内容配置完毕后,在手机上打开BubbleUPnp播放器,划出侧边栏,"RENDERER"(渲染器)选择:"Local Renderer","LIBRARY"(媒体库)选择"volumio:minidlna",在底栏的"LIBRARY"中可以看到Volumio媒体库中的文件。播放及控制步骤同第一部分。

Screenshot_20170301-214448.png

  1. 在Volumio上播放树莓派SD卡中的本地音乐
    (服务器:MiniDLNA | 渲染器:Volumio | 控制器:BubbleUPnp)

在第二部分中我们已经安装了MiniDLNA服务器,所以我们可以使用BubbleUPnp控制Volumio播放树莓派SD卡中的本地音乐。也就是说,服务器和渲染器都在Volumio系统中。在BubbleUPnp中,"RENDERER"(渲染器)选择:"Volumio","LIBRARY"(媒体库)选择"volumio:minidlna"。

Screenshot_20170301-215550.png

  1. 使用BubbleUPnp播放手机中的本地音乐
    (服务器:BubbleUPnp | 渲染器:BubbleUPnp | 控制器:BubbleUPnp)

这就不关DLNA的事儿了,纯粹就是本地播放手机中的音乐(滑稽脸)。

参考资料:
DLNA - 百度百科:
https://wapbaike.baidu.com/item/DLNA/10415195

HOW TO START THE DLNA SERVER FOR VOLUMIO 1.5 ON THE PI - Volumio.org:
https://volumio.org/forum/how-start-the-dlna-server-for-volumio-the-t2401.html

文章更新

20170221 初次成文
20170418 修改"SSH配置"内容

不务正业的小苏又来了~

这些日子小苏入了一款适用于树莓派的Dac扩展板,可以将音频文件解码为模拟信号通过3.5mm插孔或者通过双莲花插口输出。相应的,需要专用的系统Volumio2来驱动这块Dac扩展板。

为什么要专门写这篇文章呢?因为在可被百度搜索到的中文网页中,有关Volumio配置的中文文章少之又少,不得已,小苏只好把目光转向了谷歌。在爬了若干英文资料后,小苏终于解决了一个又一个的坑,成功配置好了Volumio2。

在这篇文章中,小苏使用的扩展板型号是PiFi Dac+ V2.0,Volumio版本为发文时的最新版Volumio2.041 (2016-12-12)。

折腾记录

1.系统烧写:

烧写Volumio的步骤和烧写Raspbain的步骤是一样的。在Windows下可以使用win32diskimager烧写镜像至SD卡,在Linux下可以使用dd命令烧写镜像。Windows下烧写镜像的文章有很多,如果你想在Linux下烧写镜像,可以参考这篇文章:

Linux命令行烧录树莓派镜像至SD卡 - 树莓派实验室

稍稍告诉你,如果你有两张SD卡,并且其中的一张安装了Rasbain或者其他适配于树莓派的Linux系统时,也可以在树莓派上使用dd命令,将镜像烧写到另一张SD卡。

Volumio的镜像文件可以在这里下载到:

https://github.com/volumio/Volumio2/releases

2.上电开机:

将Volumio镜像烧写到SD卡后,将SD卡插入树莓派,将Dac扩展板下的插槽插入树莓派的GPIO引脚后,就可以上电开机了。上电后,Dac扩展板上的红色指示灯(电源指示灯)会亮起,代表扩展板通电正常。初次开机花费的时间比较长,可能需要5分钟左右的时间,在这段时间内,Volumio会自动执行系统初始化,扩展SD卡分区等工作。等待这些工作进行完毕后,Volumio会开启一个名为"Volumio",密码为"volumio2"(注意大小写,密码中的"v"为小写,热点名称中的"V"为大写)的热点方便用户配置。这个热点的开启也标志着Volumio开机成功。

3.语言配置:

连接此热点后,我们可以通过在浏览器地址栏中输入:http://volumio.local或者http://192.168.211.1/来登陆Volumio的WebUI。由于Volumio的WebUI语言默认为英文,所以我们需要依次点击"齿轮图标" - APPEARANCE - Select Language - 简体中文 来将WebUI的语言设置为简体中文(下图为语言变更前的截图,点击"Save"按钮后语言就会被更改为中文了~)。

Screenshot_20170220-223357.png

4.Dac设置:

直插Dac扩展板之后是不能直接播放声音的。还需要在"播放选项"中对Dac进行一番设置。小苏的设置图如下:

Screenshot_20170220-222914.png

按照图中设置完毕后,对于DAC Model设置这一块,做出更改后理论上是不需要重启就可以生效的(仅仅是对于我这块PiFi Dac+ v2.0或者是对于HiFiBerry Dac+来说,其他板子还是需要重启才能生效的),但是为了保险起见,小苏还是推荐大家在更改DAC Model后进行一次重启操作("齿轮图标" - 关机 - 重启),确保驱动正常工作无误。

5.SSH配置:

Volumio默认开启了SSH服务,所以当你的设备与树莓派处在同一WIFI网络下时,可以通过SSH连接到树莓派。这也就意味着你可以通过SSH连接到Linux终端对树莓派进行命令行操作,也可以通过SFTP连接到树莓派进行文件的传输与管理操作。因为Volumio基于Rasbain,所以Volumio在终端的很多操作与Rasbain相似。值得说明的是,在Volumio2.0中,默认的SSH帐号不是pi而是volumio,默认的密码不是raspberry而是volumio。也就是说,在Volumio中,登陆SSH的默认帐号密码都是volumio

通过SSH连接到终端后,终端会输出以下欢迎界面:

Screenshot_20170220-234000.png

因为Volumio基于Rasbain,所以我们可以像在Rasbain上一样,对Volumio进行更换软件源,安装软件等操作。详情可以参考我的这篇文章:

树莓派折腾记:琐碎小笔记

同时,给Volumio执行sudo apt-get upgrade等升级命令是无法正常升级的,原因是Volumio的正常运行需要某些包的支持,升级后可能导致这些新版本的包不再兼容Volumio而损坏系统,所以不要给Volumio执行升级(upgrade)操作,即使你这么做了,你也无法升级成功。

6.播放音乐

进行了前面那么多配置,终于到了最激动人心的时刻了。Volumio支持播放本地音乐(即存放在SD卡中的音乐文件),USB存储中的音乐(即标准USB存储设备中的音乐文件),还支持播放NAS中的音乐。当你插入USB存储设备或者连接到NAS后,Volumio会自动挂载这些设备并在"Browse界面" - 音乐库中显示出来。那么问题来了,本地音乐应该放到什么地方呢?是不是把音乐文件放到SD卡的任何一个目录Volumio都能识别并且能在"音乐库"中显示出来呢?

当然不是~

对于本地音乐,最好的方式是将它们通过SFTP上传到/data/INTERNAL/目录下,并且最好按照自己的播放习惯分文件夹存储(当然不分文件夹存储也可以,但是如果把所有音乐文件直接塞到INTERNAL目录下,从"音乐库"中加载文件时可能会很费劲),如果不把音乐文件存放在/data/INTERNAL/下,Volumio很可能无法识别,即使能够识别,也有可能出现无法播放的情况。

在Volumio官方社区给出的一种方式是将音乐文件存放到/home/volumio/music/下,然后将/home/volumio/music链接到/var/lib/mpd/music/下,小苏试了一下,这种方法在Volumio2.0上似乎并不可取,使用这种方法会出现可以识别音乐文件但是无法播放的情况。也许这种方法在Volumio1.x下可行吧~

(这是小苏推荐的本地音乐文件存放方式:)

Screenshot_20170221-000814.png

到此为止,小苏关于Volumio的介绍就结束了~下面看看Volumio的WebUI截图吧~

Screenshot_20170219-204052.png

Screenshot_20170221-000346.png

Screenshot_20170221-000337.png

Screenshot_20170221-000459.png

Screenshot_20170221-000826.png

参考资料

Volumio2 Github项目:

https://github.com/volumio/Volumio2/

Volumio 官方帮助文档(docs):

https://volumio.github.io/docs/index.html

Linux命令行烧录树莓派镜像至SD卡 - 树莓派实验室:

http://shumeipai.nxez.com/2013/12/08/linux-command-line-burn-raspberry-pi-mirror-to-sd-card.html