Skip to content

MPD + Rmpc 完整使用指南

字数
1827 字
阅读时间
10 分钟

1 概述

MPD(Music Player Daemon)是一个客户端-服务器模式的音乐播放器,RMPC 是一个功能丰富的现代 MPD 客户端,提供直观的 TUI 界面和强大的 CLI 功能。

2 安装软件包

2.1 安装 MPD

bash
sudo pacman -S mpd rmpc

3 配置 MPD

3.1 创建配置目录和文件

bash
mkdir -p ~/.config/mpd/playlists
cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf

3.2 使用你的 MPD 配置

编辑 ~/.config/mpd/mpd.conf

bash
music_directory     "~/Music"
playlist_directory  "~/.config/mpd/playlists"
db_file             "~/.config/mpd/mpd.db"
log_file            "~/.config/mpd/mpd.log"
pid_file            "~/.config/mpd/mpd.pid"
state_file          "~/.config/mpd/mpd.state"

bind_to_address     "127.0.0.1"
port                "6600"

restore_paused "yes"
auto_update "yes"

audio_output {
    type    "pipewire"
    name    "PipeWire Sound Server"
}
audio_output {
    type    "fifo"
    name    "my_fifo"
    path    "/tmp/mpd.fifo"
    format  "44100:16:2"
}

4 启动和初始化

4.1 启动 MPD 服务

bash
sudo systemctl --user enable --now mpd

4.2 创建音乐目录

bash
mkdir -p ~/Music

4.3 更新音乐数据库

bash
# 使用 rmpc 更新数据库
rmpc update

# 或者等待 MPD 自动更新(根据你的 auto_update 设置)

5 Rmpc 配置和使用

5.1 Rmpc 配置文件

~/.config/rmpc/config.ron

ron
#![enable(implicit_some)]
#![enable(unwrap_newtypes)]
#![enable(unwrap_variant_newtypes)]
(
   address: "127.0.0.1:6600",
   password: None,
   theme: Some("Catppuccin Macchiato"),
   cache_dir: None,
   on_song_change: None,
   volume_step: 5,
   max_fps: 30,
   scrolloff: 0,
   wrap_navigation: false,
   enable_mouse: true,
   enable_config_hot_reload: true,
   status_update_interval_ms: 1000,
   rewind_to_start_sec: None,
   reflect_changes_to_playlist: false,
   select_current_song_on_change: false,
   browser_song_sort: [Disc, Track, Artist, Title],
   directories_sort: SortFormat(group_by_type: true, reverse: false),
   album_art: (
       method: Auto,
       max_size_px: (width: 1200, height: 1200),
       disabled_protocols: ["http://", "https://"],
       vertical_align: Center,
       horizontal_align: Center,
   ),
   keybinds: (
       global: {
           ":":       CommandMode,
           ",":       VolumeDown,
           "s":       Stop,
           ".":       VolumeUp,
           "<Tab>":   NextTab,
           "<S-Tab>": PreviousTab,
           "1":       SwitchToTab("Queue"),
           "2":       SwitchToTab("Directories"),
           "3":       SwitchToTab("Artists"),
           "4":       SwitchToTab("Album Artists"),
           "5":       SwitchToTab("Albums"),
           "6":       SwitchToTab("Playlists"),
           "7":       SwitchToTab("Search"),
           "q":       Quit,
           ">":       NextTrack,
           "p":       TogglePause,
           "<":       PreviousTrack,
           "f":       SeekForward,
           "z":       ToggleRepeat,
           "x":       ToggleRandom,
           "c":       ToggleConsume,
           "v":       ToggleSingle,
           "b":       SeekBack,
           "~":       ShowHelp,
           "u":       Update,
           "U":       Rescan,
           "I":       ShowCurrentSongInfo,
           "O":       ShowOutputs,
           "P":       ShowDecoders,
           "R":       AddRandom,
       },
       navigation: {
           "k":         Up,
           "j":         Down,
           "h":         Left,
           "l":         Right,
           "<Up>":      Up,
           "<Down>":    Down,
           "<Left>":    Left,
           "<Right>":   Right,
           "<C-k>":     PaneUp,
           "<C-j>":     PaneDown,
           "<C-h>":     PaneLeft,
           "<C-l>":     PaneRight,
           "<C-u>":     UpHalf,
           "N":         PreviousResult,
           "a":         Add,
           "A":         AddAll,
           "r":         Rename,
           "n":         NextResult,
           "g":         Top,
           "<Space>":   Select,
           "<C-Space>": InvertSelection,
           "G":         Bottom,
           "<CR>":      Confirm,
           "i":         FocusInput,
           "J":         MoveDown,
           "<C-d>":     DownHalf,
           "/":         EnterSearch,
           "<C-c>":     Close,
           "<Esc>":     Close,
           "K":         MoveUp,
           "D":         Delete,
           "B":         ShowInfo,
       },
       queue: {
           "D":       DeleteAll,
           "<CR>":    Play,
           "<C-s>":   Save,
           "a":       AddToPlaylist,
           "d":       Delete,
           "C":       JumpToCurrent,
           "X":       Shuffle,
       },
   ),
   search: (
       case_sensitive: false,
       mode: Contains,
       tags: [
           (value: "any",         label: "Any Tag"),
           (value: "artist",      label: "Artist"),
           (value: "album",       label: "Album"),
           (value: "albumartist", label: "Album Artist"),
           (value: "title",       label: "Title"),
           (value: "filename",    label: "Filename"),
           (value: "genre",       label: "Genre"),
       ],
   ),
   artists: (
       album_display_mode: NameOnly,
       album_sort_by: Name,
   ),
tabs: [
   (
       name: "Queue",
       pane: Split(
           direction: Horizontal,
           panes: [(size: "60%", pane: Pane(Queue)), (size: "40%", pane: Pane(AlbumArt))],
       ),
   ),
   (
       name: "Directories",
       pane: Pane(Directories),
   ),
   (
       name: "Artists",
       pane: Pane(Artists),
   ),
   (
       name: "Album Artists",
       pane: Pane(AlbumArtists),
   ),
   (
       name: "Albums",
       pane: Pane(Albums),
   ),
   (
       name: "Playlists",
       pane: Pane(Playlists),
   ),
   (
       name: "Search",
       pane: Pane(Search),
   ),
],
)

~/.config/rmpc/themes/Catppuccin Macchiato.ron

ron
#![enable(implicit_some)]
#![enable(unwrap_newtypes)]
#![enable(unwrap_variant_newtypes)]
(
    default_album_art_path: None,
    draw_borders: false,
    show_song_table_header: false,
    symbols: (song: "🎵", dir: "📁", playlist: "🎼", marker: "\u{e0b0}"),
    layout: Split(
        direction: Vertical,
        panes: [
            (
                pane: Pane(Header),
                size: "1",
            ),
            (
                pane: Pane(TabContent),
                size: "100%",
            ),
            (
                pane: Pane(ProgressBar),
                size: "1",
            ),
        ],
    ),
    progress_bar: (
        symbols: ["", "", "⭘", " ", " "],
        track_style: (bg: "#1e2030"),
        elapsed_style: (fg: "#c6a0f6", bg: "#1e2030"),
        thumb_style: (fg: "#c6a0f6", bg: "#1e2030"),
    ),
    scrollbar: (
        symbols: ["│", "█", "▲", "▼"],
        track_style: (),
        ends_style: (),
        thumb_style: (fg: "#b7bdf8"),
    ),
    browser_column_widths: [20, 38, 42],
    text_color: "#cad3f5",
    background_color: "#24273a",
    header_background_color: "#1e2030",
    modal_background_color: None,
    modal_backdrop: false,
    tab_bar: (active_style: (fg: "black", bg: "#c6a0f6", modifiers: "Bold"), inactive_style: ()),
    borders_style: (fg: "#6e738d"),
    highlighted_item_style: (fg: "#c6a0f6", modifiers: "Bold"),
    current_item_style: (fg: "black", bg: "#b7bdf8", modifiers: "Bold"),
    highlight_border_style: (fg: "#b7bdf8"),
    song_table_format: [
        (
            prop: (kind: Property(Artist), style: (fg: "#b7bdf8"), default: (kind: Text("Unknown"))),
            width: "50%",
            alignment: Right,
        ),
        (
            prop: (kind: Text("-"), style: (fg: "#b7bdf8"), default: (kind: Text("Unknown"))),
            width: "1",
            alignment: Center,
        ),
        (
            prop: (kind: Property(Title), style: (fg: "#7dc4e4"), default: (kind: Text("Unknown"))),
            width: "50%",
        ),
    ],
    header: (
        rows: [
            (
                left: [
                    (kind: Text("["), style: (fg: "#b7bdf8", modifiers: "Bold")),
                    (kind: Property(Status(State)), style: (fg: "#b7bdf8", modifiers: "Bold")),
                    (kind: Text("]"), style: (fg: "#b7bdf8", modifiers: "Bold"))
                ],
                center: [
                    (kind: Property(Song(Artist)), style: (fg: "#eed49f", modifiers: "Bold"),
                        default: (kind: Text("Unknown"), style: (fg: "#eed49f", modifiers: "Bold"))
                    ),
                    (kind: Text(" - ")),
                    (kind: Property(Song(Title)), style: (fg: "#7dc4e4", modifiers: "Bold"),
                        default: (kind: Text("No Song"), style: (fg: "#7dc4e4", modifiers: "Bold"))
                    )
                ],
                right: [
                    (kind: Text("Vol: "), style: (fg: "#b7bdf8", modifiers: "Bold")),
                    (kind: Property(Status(Volume)), style: (fg: "#b7bdf8", modifiers: "Bold")),
                    (kind: Text("% "), style: (fg: "#b7bdf8", modifiers: "Bold"))
                ]
            )
        ],
    ),
)

5.2 启动 Rmpc TUI

bash
rmpc

5.3 Rmpc TUI 基本操作

5.3.1 标签页导航

快捷键功能
1切换到播放队列标签页
2切换到目录浏览标签页
3切换到艺术家标签页
4切换到专辑艺术家标签页
5切换到专辑标签页
6切换到播放列表标签页
7切换到搜索标签页
Tab / S-Tab下一个/上一个标签页

5.3.2 播放控制

快捷键功能
p播放/暂停
>下一首
<上一首
s停止
f快进
b快退

5.3.3 播放模式

快捷键功能
z切换重复模式
x切换随机模式
c切换消费模式
v切换单曲模式

5.3.4 音量控制

快捷键功能
.增加音量
,降低音量

5.3.5 导航操作

快捷键功能
j/k上下移动
h/l左右移动(在分栏界面)
Enter确认/播放选中项目
Space选择项目
a添加到播放列表
A添加所有项目到播放列表

6 Rmpc CLI 命令参考

6.1 基本播放控制

bash
# 播放控制
rmpc play
rmpc pause
rmpc togglepause
rmpc stop
rmpc next
rmpc prev

# 音量控制
rmpc volume 80        # 设置音量为 80%
rmpc volume +5        # 增加 5% 音量
rmpc volume -5        # 减少 5% 音量

6.2 播放列表管理

bash
# 添加音乐到播放列表
rmpc add /              # 添加整个音乐库(等效于 mpc listall | mpc add)
rmpc add "Artist/Album" # 添加特定路径的音乐

# 播放列表操作
rmpc clear             # 清空播放列表
rmpc status            # 查看播放状态
rmpc song              # 显示当前歌曲信息

6.3 数据库管理

bash
# 更新音乐数据库
rmpc update           # 扫描新增和修改的文件
rmpc rescan           # 完全重新扫描所有文件

# 搜索音乐
rmpc search artist "艺术家名"
rmpc search album "专辑名"
rmpc search title "歌曲名"

6.4 远程控制

bash
# 控制运行中的 rmpc 实例
rmpc remote keybind p          # 模拟按 p 键(播放/暂停)
rmpc remote switchtab "Queue"  # 切换到队列标签页
rmpc remote status "消息"      # 显示状态消息

7 实用操作示例

7.1 快速播放整个音乐库

bash
# 清空播放列表并添加所有音乐
rmpc clear && rmpc add / && rmpc play

7.2 创建播放列表别名

~/.bashrc~/.zshrc 中添加:

bash
# 播放整个音乐库
alias playall='rmpc clear && rmpc add / && rmpc play'

# 随机播放音乐
alias randomplay='rmpc clear && rmpc addrandom && rmpc play'

# 显示当前播放状态
alias nowplaying='rmpc status'

7.3 搜索并播放特定音乐

bash
# 搜索特定艺术家的音乐并播放
rmpc search artist "Coldplay" | rmpc add && rmpc play

# 搜索特定专辑
rmpc search album "A Rush of Blood to the Head" | rmpc add

8 故障排除

8.1 常见问题解决

MPD 无法启动

bash
# 检查配置语法
mpd --check

# 杀死现有进程并重新启动
mpd --kill
mpd

# 查看详细日志
tail -f ~/.config/mpd/mpd.log

Rmpc 连接失败

bash
# 检查 MPD 是否运行
rmpc status

# 检查连接地址和端口
# 确保与 mpd.conf 中的 bind_to_address 和 port 一致

音乐库更新问题

bash
# 强制重新扫描音乐库
rmpc rescan

# 删除数据库文件并重新创建(最后手段)
rm ~/.config/mpd/mpd.db
rmpc update

8.2 音频输出问题

检查音频输出状态

bash
# 查看可用音频输出
rmpc outputs

# 切换音频输出(如果需要)
rmpc toggleoutput "输出名称"