欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

手记:在 MacBook 上运行 Linux 那些坑

程序员文章站 2022-06-01 07:50:53
...

手记:在 MacBook 上运行 Linux 那些坑

这是一篇关于一个 Linux 桌面爱好者向世界证明他为什么要这样做的文章。

几周前,我在我的 Macbook Pro(2015年初款)上安装了 Fedora 32。在这篇文章中,我希望记录下我在这一路上经历的那些坑、快乐的时刻,以及我已经开始容忍的一些麻烦。

在文章开始之前强调一句,我遇到的大部分问题都归结于我所采用的极简主义设置。所以不要把这看作是对 Fedora/Linux 的反思,我怀疑 GNOME 的默认设置也有不少问题。

切换理由

切换的主要原因是一个杀手级应用;i3 窗口管理器。键盘快捷键,平铺的窗口,闪电般的快速体验,就像是一款专为经常 hack 计算机的人设计的软件。

安装 Linux 后,我把配置调整为:

  • 使用 maim 进行类似 OSX 的键盘快捷键截屏。

  • 总是在工作区 1 上打开网页浏览器

  • 移除标题栏

手记:在 MacBook 上运行 Linux 那些坑

我写了自用的笔记软件,因为我对市面上的任何解决方案都不满意。软件使用 SQLite,渲染 markdown,支持 LaTeX 和全文搜索。i3wm 的 scratchpad 功能让记笔记变得轻而易举。我写了自己的 FUSE 文件系统,将笔记挂载到我的机器上进行编辑,并同步回服务器。

我最喜欢的功能是 "scratchpad",你可以通过键盘快捷键在同一个工作区中打开和关闭一个窗口。这对我写的一些自定义笔记软件来说绝对是个好消息,我通过 FUSE 安装了这些软件。记笔记是一件很快乐的事情,因为不太需要上下文切换。

软件

Web 浏览器的崛起,让我意识到其实已经不怎么需要原生 GUI 软件了。我在 OSX 上似乎只用了一个 Web 浏览器、Visual Studio Code 和一个终端,通过一套 dotfiles 配置了很多 CLI/TUI 软件。

我骨子里是一个重度游戏玩家,但我很幸运地拥有一台强大的 PC 游戏机和一系列终端来满足这种需求,所以我没法评价 Linux 在这方面的支持能力。

所以对于我的大多数使用场景来说,切换操作系统并不是什么太大的障碍。

安装

安装一开始是有点焦虑,首先我不想把 Mac 的启动分区搞乱,以防万一出了点问题变砖,我花了点时间去搜索干净利落的安装方法。

幸好 Alex Dzyoba 写了一篇关于何如创建双启动分区的文章。

https://alex.dzyoba.com/blog/macbook-air-linux/

一旦完成启动,大部分功能都可以开始工作。WiFi,声音都没问题,所以我安装了 i3,应用我的 dotfiles 并开始工作。

键盘的问题

我遇到的第一个问题是试图让键盘设置与 Macbook 布局配合,特别是在本地化键盘上,我需要调整它以达到我习惯的 Caps Lock 和 Ctrl 切换。

用 setxkbmap 解决了这个问题,但必须在登录时运行它。

setxkbmap -layout gb -model apple_laptop -variant mac -option "ctrl:swapcaps"

此外,有时我把我的笔记本电脑放到办公桌上,然后插入一个外部键盘(不是苹果品牌的),当我把它插入时,这也需要额外的调整,因为 alt/windows 键由于某些原因被交换了。

setxkbmap -layout gb -model apple_laptop -variant mac \ 
-option "altwin:swap_lalt_lwin" -option "ctrl:swapcaps"

这花了一段时间才完成这些设置,但我很满意。

复制和粘贴的问题

从 OSX 转到 Linux,意味着要忘记 10 年的键盘快捷键。剪贴板的 Cmd+C、Cmd+V 不经过大量的调整根本就无法使用,花太大力气来实现对我来说似乎不值得。先放到一边吧,等有时间再研究。

所以我不得不训练自己回到使用 Ctrl 作为修饰键,一开始很不习惯,但我适应的速度之快令人惊讶。烦人的部分是在复制/粘贴到终端时,必须记住要按 Shift 键。

显示配置

如前所述,我经常把笔记本插在外部显示器上,和键盘的调整一样,这需要花费很多精力。首先,我将我的笔记本电脑放置在外部显示器的下方,所以喜欢使用上下布局。我花了很多时间来尝试并找到体面的 xrandr 设置来支持这一点。每次我放上去,显示器又飘到笔记本屏幕下方。

最终我找到了优秀的工具 arandr,它提供了一个 GUI 界面来生成适当的设置。

手记:在 MacBook 上运行 Linux 那些坑

不幸的是,我还没有找到一种在拔掉/插入显示器时自动应用这些设置的方法,所以我不得不写一个脚本在切换时运行(也包括上述的 setxkbmap 设置)。

xrandr --output eDP1 --primary --mode 2560x1600 --pos 640x2400 \
--rotate normal --output DP1 --scale 2x2 --mode 1920x1200 --pos 0x0 \
--rotate normal

视网膜屏幕

要想让所有的东西都能在笔记本上很好地缩放,需要一些努力,幸运的是,Doug Beney 写了一份详尽的指南,很容易实现。

https://dougie.io/linux/hidpi-retina-i3wm/

亮度调整

改变屏幕亮度这样需求也不简单,我花了一段时间才弄明白。感谢 askubuntu 帖子中的指导,修改了一些 i3wm 的配置设置,能够让亮度键的工作方式与你所期望的大致相同。

https://askubuntu.com/questions/715306/xbacklight-no-outputs-have-backlight-property-no-sys-class-backlight-folder

# 屏幕亮度控制
bindsym XF86MonBrightnessUp exec xbacklight -inc 5。
bindsym XF86MonBrightnessDown exec xbacklight -dec 5

睡眠功能

关闭笔记本上的盖子,应该暂停操作系统,但它似乎从来就不工作,我经常发现我的机器在第二天早上还剩30分钟电池的情况下处于滚烫的状态。

通过 Josh Sherman 的一篇帖子解决了这个问题,你还需要防止 USB 控制器唤醒系统。

https://joshtronic.com/2017/03/13/getting-suspend-in-linux-working-on-a-macbook-pro/

不幸的是,上面的这个设置需要每次启动时手工启用,所以我写了一个 systemd 服务和脚本来启用这个功能。

https://gist.github.com/djhworld/734fd6fc36768ecff639cd2d6c656f5a

告别火狐浏览器

这可能是切换中最郁闷的部分。我一直是 Firefox 的忠实粉丝,尤其是像 Tree Style Tabs 这样的扩展,对我囤积标签的恶习起到了助推作用。

不幸的是,在 Linux 上,Firefox 就是一坨 x,速度慢,启动需要很长时间,网站的渲染速度非常慢,在标签页之间的切换,会让你感觉昏昏欲睡,感觉狐狸身上的火已经熄灭了。

我尝试了所有的方法来解决这个问题,改变 about:config 中的设置,尝试 Firefox Nightly ,启用 WebRender,但似乎没有什么效果。

相比之下,Google Chrome 的速度快如闪电,真的是天地之别,所以对于进行我的 Linux 之旅,很遗憾,不得不暂时选择大 G。

其他工具和功能

  • 终端用的是 alacritty,非常平滑,速度快,字体渲染效果好。

  • redshift 就像 OSX 上的 f.lux,晚上不刺眼。

  • Dropbox的设置非常简单,尤其是在添加systemd服务时(感谢Joe Roback)。

  • Visual Studio Code - 不出所料,没有问题。

  • GIMP - 可以很好地进行截图编辑,凑合可用。

新环境的乐趣

在把所有的东西都按照我喜欢的方式配置好之后,还有些什么?

i3wm

i3wm 真是爆炸性的使用,在工作空间之间的切换,移动窗口和习惯于平铺需要一个小的学习曲线,但这意味着我使用鼠标少了很多。

额外的好处是一切都感觉很快,这可能只是一个感知的问题,但有时感知很重要。

手记:在 MacBook 上运行 Linux 那些坑

注:我知道 swaywm 的配置与 i3 兼容,并在Wayland上运行。我已经试过了,它看起来很整洁,而且它可能会解决上面描述的键盘/显示器问题,但在我的 Retina 显示器上,Chrome 看起来非常模糊。我猜是因为它是通过 XWayland 渲染的,一旦解决这个问题,我就会考虑转换。

systemd

Systemd 在社区里受到了很多抨击,但我真的非常喜欢它。我已经写了一些自己的服务,这些服务可以执行任务或运行软件,安装在 .config/systemd/user 下,写起来很简单。

熟悉这些工具的使用是一个艰难的过程,但感觉比以前的 init.d 脚本好多了。

DNF

我在其他机器上以 headless 模式使用 Fedora,所以我已经相当习惯了这些工具,有一个像样的包管理器,能让所有东西都保持最新版本是不错的。OSX上的 Homebrew 是一个努力,但还是差很多。

麻烦的问题

WiFi 掉线

这个问题我一直没有弄明白,但可能每周有一两次 WiFi 驱动就会停止工作。为了解决这个问题,我必须发出一个命令来重新加载内核模块。

sudo modprobe -r brcmfmac && sudo modprobe brcmfmac

不支持摄像头

我有时也会使用 Skype 和 Zoom 与家人沟通,但网络摄像头似乎不能使用,有一个****正在努力补救这个问题,但 iPad 可以作为一个不错的视频通话设备,所以还没有来得及修复它。

浏览器不支持视频硬件加速

Linux 中的网页浏览器不支持 GPU 视频加速。又一次我在观看一个关于煮鸡蛋的 YouTube 视频时本子热气腾腾散发的热量足以煮熟一个鸡蛋时候发现的。

显然,有一个 Chromium 的补丁版本据说支持,但目前看来,浏览器厂商并没有将此视为重要的任务。

不过安装 VLC 和 intel 驱动可以工作,所以只能这样了。

OSX / Linux 的差异

下面几个 OSX 功能切换之后就错过了,但似乎大多有 Linux 的等价物或变通办法。

  • 截图编辑。在 OSX 上,做一张截图,然后立即跳入内置的编辑器中添加注释和调整非常方便。一定程度上可以用 maim+GIMP 来实现。

  • pbcopy/pbpaste: 这些都是与剪贴板交互的命令行工具。Linux 下面的等价物是 xclip

  • Spotlight/Alfred。我只是把它当做一个快速计算器来用,从来没有用过那么多的文件搜索功能。启动终端(Alt+Enter)并使用 bc 似乎可以提供类似的功能。我可能会考虑把这个功能绑定到一个快捷键上。

  • 通知。设置dunst可以提供足够好的桌面通知支持。

  • Airdrop:  我很少会用它来发送东西到我的 iPad 上 — 我还没有找到合适的解决方案。

  • 1Password:这真的不是一个问题,1PasswordX 工作得很好,如果想提一句的话,我认为它可以做得更好。

工作环境

把家里机器切换到 Linux 之后,在工作环境又出现了一个新的问题,在不同的操作系统上交替使用不同的键盘快捷键,这种认知上的开销似乎有些麻烦,再加上我比较想念 i3。

为了解决这个问题,我通过 VMware Fusion 使用虚拟机,效果出奇的好,感觉几乎是原生的!我的工作机是一台 MBP 2019,有 6 个核和 32GB 内存,所以能力没啥问题。

总结

总会有一些无奈的妥协,无论是 Firefox 的性能,还是浏览器中硬件视频解码的缺失,以及不得不调整一些配置,但总的来说,换机的体验大多是好的。我承认,遇到的大部分问题是我自己造成的,但这是值得的。

我真的没有那么想念 OSX,事实上,这可能已经决定了我下一次不选择苹果的决定。硬件很优秀,但是让 Linux 运行在 2016 年之后 Macbook 机型,听起来就像一场悲壮的演习,所以我家的苹果笔记本使用历史可能就到此为止了。 

英文原文:

https://djhworld.github.io/post/2020/06/07/running-linux-on-my-macbook/

参考阅读:

本文由高可用架构翻译,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

高可用架构

改变互联网的构建方式

手记:在 MacBook 上运行 Linux 那些坑
长按二维码 关注「高可用架构」公众号