使用 mpd 和 ncmpcpp 聆听您喜爱的音乐
2020 年 3 月 31 日 | Sébastien 'sogal' Poher | 无许可
在本文中,我们将发现一个软件三合一,它将允许您从终端管理和收听音乐
我们将了解如何安装、配置和使用它,以及配置流畅集成的桌面通知。
安装
由于它们在官方 openSUSE 仓库中可用,因此安装它们就像
zypper in mpd mpclient ncmpcpp
继续配置部分!
配置 mpd,音乐播放守护进程
在本文中,我们将配置并运行 mpd 作为用户实例。如果需要,它当然可以作为系统实例运行。在这种情况下,您应该在 /etc/mpd.conf 中对其进行配置。
首先,让我们创建一些配置文件目录
mkdir ~/.config/mpd
mkdir ~/.config/mpd/playlists
然后,我们将使用软件包模板
cp /usr/share/doc/packages/mpd/mpdconf.example ~/.config/mpd/mpd.conf
并对其进行编辑以满足我们的需求。以下是重要设置的摘录(示例用户为 geeko)
grep -v "^#|^$" ~/.config/mpd/mpd.conf
music_directory "~/Music"
playlist_directory "~/.config/mpd/playlists"
db_file "~/.config/mpd/mpd.db"
log_file "~/.config/mpd/log"
pid_file "~/.config/mpd/mpd.pid"
state_file "~/.config/mpd/mpdstate"
sticker_file "~/.config/mpd/sticker.sql"
user "geeko"
bind_to_address "localhost"
port "6600"
log_level "default"
restore_paused "yes"
input {
plugin "curl"
}
audio_output {
type "pulse"
name "Pulse MPD Output"
}
audio_output {
type "fifo"
name "mpd_fifo"
path "/tmp/mpd.fifo"
format "44100:16:2"
}
filesystem_charset "UTF-8"
至关重要的是正确设置音频文件和声音输出的路径。在这里,我们使用 PulseAudio,因为它默认安装并用于大多数 openSUSE 桌面。如果您细心,您会注意到我们添加了第二个音频输出,该输出不会用于音频,而是用于在 ncmpcpp 中显示图形可视化器(是的,在终端模拟器中!)
将 mpd 作为用户空间 systemd 服务激活
现在我们将创建一个 systemd 服务,该服务将使用用户设置启动 mpd。这样 mpd 将与您的会话一起启动。
让我们创建所需的目录结构
mkdir -p ~/.config/systemd/user
并创建服务文件
$EDITOR ~/.config/systemd/user/mpd.service
添加以下内容(请记住根据您的需要调整 $USER 变量)
[Unit]
Description=Music Player Daemon
[Service]
ExecStart=/usr/bin/mpd --no-daemon /home/$USER/.config/mpd/mpd.conf
ExecStop=/usr/bin/mpd --kill
PIDFile=/home/$USER/.config/mpd/mpd.pid
[Install]
WantedBy=default.target
最后,让我们启动并启用此服务
systemctl --user start mpd
systemctl --user enable mpd
ncmpcpp 的配置
现在 mpd 启动并正在运行,我们将配置我们安装的 ncurses 客户端:ncmpcpp。
mkdir ~/.ncmpcpp
cp /usr/share/doc/packages/ncmpcpp/config ~/.ncmpcpp/
$EDITOR ~/.ncmpcpp/config
这是一个带有拆分视图的漂亮的彩色配置示例
grep -v "^#|^$" ~/.ncmpcpp/config
ncmpcpp_directory = ~/.ncmpcpp
lyrics_directory = ~/.ncmpcpp/lyrics
mpd_host = localhost
mpd_port = 6600
mpd_connection_timeout = 5
mpd_music_dir = ~/Music
mpd_crossfade_time = 5
visualizer_fifo_path = /tmp/mpd.fifo
visualizer_output_name = mpd_fifo
visualizer_in_stereo = yes
visualizer_sync_interval = 30
visualizer_type = ellipse
visualizer_look = ▮●
visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
system_encoding = "UTF-8"
playlist_disable_highlight_delay = 5
message_delay_time = 5
song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f}
song_library_format = {%n - }{%t}|{%f}
alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
now_playing_prefix = $b
now_playing_suffix = $/b
song_window_title_format = {%a - }{%t}|{%f}
browser_sort_mode = name
browser_sort_format = {%a - }{%t}|{%f} {(%l)}
song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}
playlist_show_mpd_host = no
playlist_show_remaining_time = yes
playlist_shorten_total_times = no
playlist_separate_albums = no
playlist_display_mode = columns
browser_display_mode = classic
search_engine_display_mode = classic
playlist_editor_display_mode = classic
incremental_seeking = yes
seek_time = 1
volume_change_step = 2
autocenter_mode = yes
centered_cursor = yes
progressbar_look = =>
default_place_to_search_in = database
user_interface = alternative
media_library_primary_tag = genre
default_find_mode = wrapped
header_visibility = yes
statusbar_visibility = yes
titles_visibility = yes
header_text_scrolling = yes
cyclic_scrolling = yes
lines_scrolled = 2
follow_now_playing_lyrics = yes
fetch_lyrics_for_current_song_in_background = yes
store_lyrics_in_song_dir = yes
allow_for_physical_item_deletion = no
screen_switcher_mode = browser, media_library, visualizer
startup_screen = playlist
startup_slave_screen = "visualizer"
startup_slave_screen_focus = no
locked_screen_width_part = 50
jump_to_now_playing_song_at_start = yes
ask_before_clearing_playlists = yes
clock_display_seconds = no
display_volume_level = yes
display_bitrate = no
display_remaining_time = yes
ignore_leading_the = no
mouse_support = yes
enable_window_title = yes
external_editor = vim
use_console_editor = yes
colors_enabled = yes
使用这些设置,您将拥有一个带有左侧当前播放列表和右侧可视化器的拆分视图。所有选项在 ncmpcpp 的 man 页面中都有很好的文档记录。

使用它
以下是一些可以帮助您入门的快捷键
- F1:显示帮助
- 1:显示播放列表;
- 2:显示目录浏览器
- 3:显示搜索
- 4:显示库
- 5:播放列表编辑器
- 6:标签编辑器
- 8:可视化器
- p:切换播放/暂停
- a:将选择添加到播放列表
- >:播放下一首曲目
- <:播放上一首曲目
桌面环境快捷方式
默认情况下,按 p 将切换暂停,但是如果您不在运行 ncmpcpp 的终端前呢?这就是 mpc 发挥作用的地方。让我们打开我们最喜欢的桌面环境设置并添加一些键盘快捷方式
- MPD 暂停:使用
mpc toggle命令 - MPD 上一首歌曲:使用
mpc prev命令 - MPD 下一首歌曲:使用
mpc next命令
额外:在歌曲更改时收到通知
ncmpcpp 的配置中有一个参数,可以使其在歌曲更改时触发一个命令,我们将使用它来执行一个小型的 Python3 脚本,以便弹出漂亮的桌面通知。
为了使用此脚本,您需要确保安装了两个小库
zypper in python3-notify2 python3-python-mpd2
然后将以下代码添加到名为 mpd_notify.py 的文件中,该文件位于您的 $HOME/bin 中
#!/usr/bin/env python3
# -*- coding: UTF8 -*-
import gi
import notify2
from gi.repository import GLib
from mpd import MPDClient
client = MPDClient()
client.timeout = 10
client.idletimeout = None
client.connect("localhost", 6600)
mpd_song = MPDClient.currentsong(client)
s_artist = mpd_song['artist']
s_title = mpd_song['title']
s_album = mpd_song['album']
s_notification = s_artist + " - " + s_title + " - (" + s_album +")"
notify2.init("Music Player Demon")
show_song = notify2.Notification("Music Player Demon", s_notification,
icon="/usr/share/icons/Adwaita/scalable/emblems/emblem-music-symbolic.svg")
show_song.set_hint("transient", True)
show_song.show()
现在,我们将只在 ncmpcpp 配置文件的文件中添加相应的参数
execute_on_song_change = "/usr/bin/python3 /home/$USER/bin/mpd_notify.py"

最后
我们希望您喜欢这次发现,并享受使用这些工具管理您的音乐。ncmpcpp 非常强大,它包括搜索功能、音乐库的不同视图、标签编辑器以及您需要的一切,可以根据您的喜好进行调整!
类别: Leap Tumbleweed 每周新闻