在 MacBook 上运行 Linux 那些坑

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

 

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

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

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

切换理由

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

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

  • 使用 maim 进行类似 OSX 的键盘快捷键截屏。
  • 总是在工作区 1 上打开网页浏览器
  • 移除标题栏

5a3e5f0f32b05f8.png" target="_blank">5a3e5f0f32b05f8.png" width="auto" border="0" height="auto" alt="" title="">

 

我写了自用的笔记软件,因为我对市面上的任何解决方案都不满意。软件使用 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 解决了这个问题,但必须在登录时运行它。

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

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

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

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

复制和粘贴的问题

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

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

显示配置

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

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

 

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

  1. xrandr --output eDP1 --primary --mode 2560x1600 --pos 640x2400 \ 
  2. --rotate normal --output DP1 --scale 2x2 --mode 1920x1200 --pos 0x0 \ 
  3. --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

  1. # 屏幕亮度控制 
  2. bindsym XF86MonBrightnessUp exec xbacklight -inc 5。 
  3. 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 真是爆炸性的使用,在工作空间之间的切换,移动窗口和习惯于平铺需要一个小的学习曲线,但这意味着我使用鼠标少了很多。

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

 

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

systemd

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

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

DNF

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

麻烦的问题

WiFi 掉线

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

  1. 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/

本文转载自微信公众号「高可用架构」,可以通过以下二维码关注。转载本文请联系高可用架构公众号。

 

责任编辑:武晓燕 来源: 高可用架构
相关推荐

2011-03-25 11:21:36

NagiosLinux

2018-02-06 08:36:02

简历程序员面试

2015-12-07 09:29:09

MacBook ProJava环境

2010-11-17 09:29:31

linux Fedora 13Ubuntu 10.0

2014-06-23 10:09:20

MacBook ProLinux

2021-01-25 08:00:00

Linux系统数据

2020-06-01 16:25:43

WindowsLinux命令

2016-02-16 09:36:37

CrossOverLinuxWindows

2022-06-30 13:54:16

BottlesLinuxWindows

2013-07-02 11:34:46

SUSELinuxWindows Azu

2013-07-02 10:52:42

SUSELinuxWindows Azu

2011-05-19 09:10:17

JavaScriptLinux

2022-01-18 17:57:21

PodmanLinux容器

2015-10-14 10:02:33

ClojureScri Android

2019-10-09 16:50:48

SSHLinux远程系统

2022-06-23 09:55:56

WineZGUILinux 桌面Windows 应用

2018-02-07 11:15:07

Vagrant使用问题

2020-07-20 18:30:44

Fedora 32DockerLinux

2010-05-21 15:23:25

ipadSAP

2010-10-09 08:58:03

NginxRuby on Rai
点赞
收藏

51CTO技术栈公众号