将 macOS 系统配置为 Linux 桌面体验

最近一直关注搭载苹果 M1 芯片的 MacBook Pro 笔记本电脑。说实话,这是我第一次对苹果的 Mac 系列计算设备感兴趣,因为从网上的评测来看:M1 芯片实在是太香了。然而就搭载系统的用户体验而言,我个人认为 macOS 的使用体验却是三大系统(另外两个是 Windows 与 Linux)中最差的。

作为习惯了 Ubuntu Linux 桌面环境的用户,本文介绍了对于 macOS 的部分配置方法,使用户在使用 macOS 时能部分继承 Ubuntu Linux 的开发和使用体验,减少迁移成本。

“文件”应用

文件管理器被 macOS 称为“访达”(Finder)。来自 Ubuntu Unity 与 GNOME 的用户可能对于这个向用户隐藏了大多数细节的文件管理器感到不满。我们建议的调整设置如下:

  • 移除标签功能,允许显示、修改文件拓展名:在“Finder”应用菜单的“偏好设置”中,设置以下项:
    • 如果不喜欢使用 Finder 中的“标签”功能,可以删除所有“标签”选项卡下的标签
    • 在“高级”选项卡下勾选“显示所有文件拓展名”,取消勾选“更改拓展名之前警告”
  • 在标题栏与状态栏显示绝对路径:一些开发者需要始终关注 Finder 中的所在绝对路径。设置方法如下:
    • 对于状态栏:在“Finder”应用菜单的“显示”中,选择“显示路径菜单”。这样,可以通过双击路径的方式返回任意层路径,也可以在路径上点击右键复制绝对路径地址。
    • 对于标题栏:打开“终端”,然后依次执行下列命令:defaults write com.apple.finder _FXShowPosixPathInTitle -bool YESkillall Finder 即可。

对于习惯在 GNOME 文件程序中使用 Ctrl+L 快捷键输入绝对路径以进行跳转的高级用户,macOS 上的对应快捷键是 ⇧⌘G。

另外,如果将 macOS “键盘”设置中“快捷键”选项卡中的“服务”>“新建位于文件夹位置的终端窗口”选项开启,则在 Finder 中右键点击文件夹时,能够看到在新终端窗口中打开该文件夹位置的选项。如果你为该操作绑定了对应的快捷键,则只要选中文件夹并按下对应快捷键,即可在终端中打开对应的文件夹。

经过配置绝对路径显示、去除文件分类标签后的 Finder

“终端”应用

最近版本的 macOS 开始使用 zsh 作为默认登录 Shell 与交互式 Shell,而在 Ubuntu Linux 中的默认 Shell 是 bash。此外,相比 GNOME 终端,macOS 中的 Terminal 在默认配色和字体上均有差异。我们建议的调整如下:

  • 安全键盘输入:在“Terminal”应用菜单中勾选“安全键盘输入”一项。该特性能防止键盘记录器软件录制用户在 Terminal 应用中的输入,以提高安全性。
  • Ubuntu 终端主题:我们推荐在 macos-terminal-themes 仓库中选择你喜爱的终端主题,具体方法为:
    • 将该仓库下载到本地,进入 themes/ 文件夹
    • 双击 *.terminal 文件,这将会以相应的配色主题打开一个新的 Terminal 窗口
    • 如果你喜欢该配色,点击“Shell”菜单中的“将该置用作默认设置”即可
  • 使用 Ubuntu 字体:Ubuntu 在 GNOME Terminal 中默认使用了等宽字体 Ubuntu Mono。该字体可以在 Ubuntu Design 字体页面找到。首先解压下载的字体压缩包,然后将每一种字体安装到 macOS 即可。然后,在 Terminal 的“偏好设置…”菜单中,选择“描述文件”选项卡,然后将终端默认字体调整为 Ubuntu Mono 即可。我们建议的字号为 18 号。
  • 使用 bash 作为默认 Shell:如果比起来 zsh,你更喜欢(或者更熟悉)bash,则可以将 bash 设置为默认交互式 Shell。要完成此操作,你只需在 Terminal 的“偏好设置”菜单中将默认交互式 Shell 填写为 /bin/bash 即可。使用 chsh 命令更改使用 SSH 默认连接的 Shell 为 /bin/bash。如需消除每次启动时的默认 Shell 警告信息,只需在 .bash_profile.profile 文件中加入 export BASH_SILENCE_DEPRECATION_WARNING=1 一行。如果发现终端显示中文字符为问号(?),则需要将下述两行也加入到上述配置文件中:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
  • 为终端添加颜色支持:如果你有自己喜爱的 .bashrc 或者 .bash_profile 配置文件(我自己的配置文件在此处,顺便分享给大家),你可能注意到 macOS Terminal 默认不提供彩色支持。我们需要在 .bash_profile 或其他配置文件中加入以下两行即可:
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

与用户在 Linux 系统上的习惯不同,我们建议将 Shell 配置放置于 .bash_profile 而不是 .bashrc 中。该配置文件将在登录时运行

对了,macOS 上的 Shell 默认也尊重 /etc/motd 文件,如果愿意,你也可以设置该文件以为你的终端添加一份个人色彩:)

  • 取消 “在关闭前询问” 功能:如果在关闭终端之前,终端中有程序正在运行,则关闭时终端会弹出一个确认是否关闭的对话框。如果不希望这个对话框弹出,可以在 “偏好设置…”菜单中,选择“描述文件”选项卡,然后在对应描述文件的 “Shell” 选项中选择 “从不在关闭前询问” 选项
经调整主题色、字体、欢迎信息、颜色以及默认 Shell 的 Terminal

其他体验配置

除了上述介绍的专门配置 Finder 与 Terminal 应用以外,我们还额外建议配置以下项目,以增强习惯于 Linux 桌面环境的用户使用 macOS 时的体验:

  • 配置 Touch Bar 显示为 F1-F12 键:如果你习惯于使用标准键盘,则可能对于支持 Touch Bar 的机型默认显示 App 快捷操作而不满。该选项可以在 macOS 设置“键盘”中“触控栏显示 F1、F2 等键”而更改。我通常习惯于将 macOS 键盘快捷方式中许多组合键改为 Fx。
  • 禁用 Caps Lock 键的切换输入法语义:macOS 默认覆盖了单次点按 Caps Lock 键的语义,为了能够使使用 PC 的用户习惯将 Caps Lock 按键仅用作大小写切换,建议在 macOS 设置“键盘”中“输入源”取消勾选“将 Caps Lock 用于 ABC 输入法切换”
  • 禁用输入法的自动修复和填充功能:macOS 的输入法默认会在敲击两次空格时自动插入一个句点,以及自动将首字母大写等。如果不希望这些功能开启,可以在 macOS 的设置 “键盘” 中找到 “输入法”,然后在 “输入源” 后点击 “编辑按钮”,关闭其中的相应选项即可
  • 禁用长按字母键时的字母变体提示:在长按字母键时,你的需求应该是重复这个字母多次。但对于一些字母(比如 o)来说,macOS 的默认行为是弹出一个字母变体的选择框。要关闭该特性,只需执行:
defaults write -g ApplePressAndHoldEnabled -bool false
  • 关闭打开与缩小 App 时的效果:macOS 默认为打开 App 与缩小 App 提供了一系列动画效果,如果需要关闭这些效果,则应当在 macOS 设置“程序坞与菜单栏”中设置以下两项:
    • 将“最小化窗口时使用”设置为“缩放效果”
    • 取消勾选“弹跳打开应用程序”
  • 固定 Dock 大小:你是否在使用 Dock(程序图标栏)时不小心调整它的大小?使用下列命令以固定 Dock 大小:
defaults write com.apple.dock size-immutable -bool yes; killall Dock
  • 关于退出 App:许多 Windows 与 Linux 桌面环境用户会对如何退出 macOS 中的应用程序感到困惑,因为通过点击左上角的“关闭”按钮将 App 的所有窗口均关闭仍不足以关闭该应用程序。macOS 文档中描述的方法是使用 Q 键组合以彻底关闭应用程序。如果你希望在下次启动应用程序时不再恢复先前的使用状态,则需在 macOS 设置“通用”中勾选“退出 App 时关闭窗口”选项。
  • 显示滚动条:对于多年习惯使用鼠标操作桌面环境的用户,将需要滚动的页面中的滚动条隐藏是违反直觉的一种行为。要始终显示滚动条,需要在 macOS 设置“通用”中将“显示滚动条”选项调整为“始终”。
  • 开发人员工具:经常使用 python3 或 git 等工具?你应该安装 Xcode 开发人员工具。在初次安装或升级系统后在终端中执行下述指令以安装开发人员工具:xcode-select --install
  • 锁屏时希望仍可运行应用:macOS 对于锁屏时应用程序的处理方式与其他系统略有不同。通常来讲当屏幕熄灭时,网络和其他应用程序就进入“暂停”状态。我们推荐使用名为 KeepYouAwake 的开源软件来阻止 macOS 休眠时关闭特定功能。然而,如果合上笔记本盖子且没有任何外界屏幕可用时,可能还会终止所有应用程序的活动。
  • 禁用在网络存储以及移动存储中创建 .DS_Store 文件:macOS 会默认在访问的文件夹中创建用于追踪元信息的 .DS_Store 文件,但是在网络存储和移动存储时,自动创建该文件可能没有意义,使用下列命令来禁用在网络以及移动存储中自动创建 .DS_Store 文件的行为:
    defaults write com.apple.desktopservices DSDontWriteNetworkStores true
    defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
  • 启用 id_ed25519_sk 密钥的认证支持:使用 macOS 默认的 ssh 客户端连接到远端服务器时,如果密钥需要使用 FIDO2 设备(比如 id_ed25519_sk 或 id_ecdsa_sk),则可能在连接时会遇到 Permission denied (publickey) 的报错,请参考这篇 StackOverflow 回答,使用 Homebrew 包管理器重新安装 ssh 软件,并在 PATH 中将 Homebrew 版本的 ssh 路径置于其他路径之前即可

希望基于上述建议,能使你在 macOS 上有一个愉快的开发体验。如果任何时候感到不舒服,欢迎随时换用 Windows 或者 Linux 桌面环境体验:)