Mac

macOS 还是需要 Karabiner 来解决 CapsLock 和 Shift 延迟的问题

在前阵子的 macOS 实用小工具记录 2 里提到,因为有原生锁屏快捷键后不用装 Karabiner 了,但最近在 macOS 下打字,按 CapsLock 切换大小写或临时按 Shift 时总有延迟的感觉,搜到这个现象很普遍,但怎么解决不知道

今天看到 v2ex 这个帖 https://www.v2ex.com/t/851971 ,以及里面提到的几个其他讨论帖,还是把 Karabiner 装了回来,因为

How to disable caps lock delay
Karabiner-Elements disables the caps lock delay without any action since v13.3.0.

官网在 https://karabiner-elements.pqrs.org/

如果用 brew 则用 brew install karabiner-elements 安装

也说 Mac 的不好

年后在新团队弄到 MacBook Pro w/ retina 一台, 开始了从 Windows 阵营投奔 OS X 的路程, 到现在用了也有三个多月了, 也说下 Mac (包括 OS X, rMBP 等) 的一些奇葩问题和解决方案

字体渲染

我没用 Mac 前就老看到不同的地方有各种果粉吹 Mac 下的字体渲染, 比如 Windows 的 TureType 会导致缺笔画啦, 微软雅黑其实是破坏了字的逻辑结构啦, 但是曾经借到一台 MacBook Pro 怎么看这字都很糊啊, 换字体也一样, 难道是睡眠不足导致视线模糊?

今年拿到 retina 屏的新本, 顿时觉得世界美好了好多, 插上外接显示器, 果然字又糊的一塌糊涂. 这时才明白, 苹果的字形确实如果粉说的是尊重字的本身, 但是这只有普通分辨率下的大号字体或高分屏下才能看的出来, 普分下字糊成那样果粉们你们都眼瞎了么

Windows 那套渲染技术和微软雅黑等字体是为液晶显示器专门优化过的, 保证在普通分辨率下也能做到笔画清楚, 不知道果粉们的优越感是不是建立在那个年代微软还没出雅黑以及 Mac 渲染技术在 CRT 显示器下可能确实更好的基础上. 没接过 CRT 显示器也没再回到以前的 Windows 系统, 反正现在用外接的 U2312 或 U2412, 从 Mac 切到 Win 下, 都觉得字体锐利清晰了好多

解决办法: 无解, 只能换 4K 显示器看看在能到 retina 级别的分辨率下的表现吧, 不过这样的话 4K 显示器也还是只能放 2K 显示器能容纳的内容了

MBP 笔记本键盘缺物理按键

这里指的是 delete (非 backspace), PageUp/Down, Home/End, PrintScreen 等, 用组合键可以实现但是真的很麻烦. 现在越来越多的笔记本都学这个, 真是好的不学坏的学挺快

解决办法: 用各种组合按键, 或外接键盘来实现

  • Fn+Backspace: Delete (Mac 键盘上 Backspace 处印的是 delete, 但逻辑是 Bs)
  • Fn+Up: PageUp
  • Fn+Down: PageDown
  • Fn+Left: Home
  • Fn+Right: End
  • Cmd+Shift+3: 截全屏并保存截图文件到桌面, 如果有多个显示器则每个显示器一张图
  • Cmd+Shift+4: 截屏幕上选定区域并保存截图文件到桌面

关于截图, 如果同时按下 Ctrl 键, 则不保存到桌面只保存到剪贴板, 可以在其他地方粘出来. 不过实测 Cmd+Ctrl+Shift+3 保存到剪贴板的只有笔记本上的主屏, 外接屏没有, Windows 下 PrintScreen 多屏的话会默认成拼接的大图

另外 Windows 有 Alt+PrintScreen 截当前活动窗口图的快捷键, Mac 下我没找到原生的快捷键, 用 Cmd+Shift+4 的方式还要自己小心拖动, 而且一松手就截出去了, 没有调整空间. 所以不是截全屏的话我一般还是用 QQ 等自带的截图工具, 会识别活动窗口自动适应大小, 选完框还能拖动调整大小, 能加框加箭头等标注

奇怪的 Home/End 键逻辑

外接键盘下 Home/End 键逻辑和 PC 的不一样, 我想的是移动到行首或行尾, Mac 默认的逻辑是移动到可编辑区域的开头和结尾 (比如一个大文本框, 是移动到最开始和最末尾, 而非当前行的开始和结尾). 一般用到这个是我写东西的时候要从当前光标选到行首或行尾, 就算用触摸板连续单击选词或整行这个效果很赞, 但依然不是我要的效果

解决方法: 自己重新做键映射, 我参考的 http://mwholt.blogspot.com/2012/09/fix-home-and-end-keys-on-mac-os-x.html 这篇文章, 摘录主要部分如下

编辑 ~/Library/KeyBindings/DefaultKeyBinding.dict 这个文件 (如果没有就新建一个, 如果目录都没有就连目录也新建), 添加如下代码 (我只选了这几个我要的), 保存后重启

{
    /* Remap Home / End to be correct :-) */
    "\UF729"  = "moveToBeginningOfLine:";                   /* Home         */
    "\UF72B"  = "moveToEndOfLine:";                         /* End          */
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";       /* Shift + End  */
}

过于霸道的全局快捷键

比如 F11, F12 这种正常码农多半会配成 Vim 或 Screen/Tmux 快捷键的功能键, 居然都有系统默认全局快捷键映射上去, 一开始还以为我在 Mac 下配置文件工作不正常, 怎么就识别不出来 F11 和 F12 呢

解决办法: 改掉就是了. 在 系统偏好设置键盘 里, 把 快捷键 标签页里的所有设置都浏览一遍, 觉得有用但是不会的去学一下, 觉得有用但是想改按键的自己改下 (比如可以把截全屏保存到剪贴板的快捷键改成 PrintScreen, 也就是 F13), 觉得没用且会影响自己的关掉 (比如 F11 显示桌面, F12 显示 Dashboard), 其他没用的留着也行 (比如 F14/F15 调屏幕亮度, 实际这两个键是 PC 键盘上的 ScrollLock 和 PauseBreak)

缺失的全局快捷键

习惯了 Win+L 锁屏结果在 Mac 上没找到

从 Win7 开始习惯了按 Win+Left/Right 来对窗口分屏, 结果 Mac 也没有相关实现, 搜的时候还看到知乎上有脑残果粉说为什么要分屏啊, 苹果使用的多桌面模式是多么优雅一定是你不会用而且要真的好苹果为什么这么多年还不跟进呢, 我去你二大爷的知乎脑残果粉, 你到底用了多久的 Mac 啊, 你试过外接一个超过 1440 分辨率宽的显示器么, 你试过码农至少要三个窗口才能好好干活么 (一个放搜索结果或参考资料用于抄, 一个是自己写的, 还有一个是运行和看结果的), 这样把外接显示器左右对半各放一个窗口连抄带写, 笔记本原生屏幕放运行环境和查看结果的浏览器才最好吧

找类似 Win+Left/Right 把窗口调整成占据屏幕一半的第三方软件, 多倒是很多, 不过要么收费 (我都没去找破解尝试), 要么在有外接显示器的情况下工作不正常

解决办法: 锁屏的快捷键上一篇博文 Mac 锁屏的各种方法已经搞定了, 一句话解决就是 Ctrl+Shift+Power

分屏的软件最后通过 Spectacle 很好达到我要的效果, 下载地址在 http://spectacleapp.com/, 作者官方开源在 https://github.com/eczarny/spectacle

软件清理

OS X 那种把单个应用都打包到一个 .app 里的设定在安装和卸载时确实很方便, 但也有一些奇葩残留, 比如右键菜单里的打开方式经常会有重复的, 比如删除个 Office 太麻烦了以至于我彻底断了去装个盗版的念头 (微软官方的删除 Office 流程: http://support.microsoft.com/kb/2398768/zh-cn)

解决办法: 能不乱装的就别乱装吧, Mac 上我还不想用类似 360 或腾讯电脑管家之类的东西去清理顺带被这些流氓不知道在电脑上干了什么. 至于右键菜单里打开方式有重复, 隔断时间清理一下, 参考自 http://www.zhihu.com/question/20599306, 摘录如下

终端下执行如下命令, 然后重启 Finder (Ctrl+Opt 点 Finder 图标)

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local\ -domain system -domain user

漏电

新 MBP 拿回来时手放笔记本上各种酥麻, 尤其是靠近电源接口那个地方, 当时心里就骂都漏成这样了这接口还好意思叫 MagSafe?

试过把电源适配器插头换成延长线的三脚插头, 无效, 试过在不同的地方用避免电压波动过大或接地不好的情况, 无效. 搜解决方案, 答案除了前面两个我试过的方法, 就是劝还是默默忍受好了, 当然也不排除我这样的果黑反讽 “这是苹果为了让用户保持清醒故意弄的” 或 “这么高大上的按摩你们居然还嫌弃”

解决办法: 无解. 不过我用了几个月后好像几乎没漏电了, 还是一样的在家和在办公室用, 不知道跟我把线卷来卷去卷多了有关

一些个人推荐的好东西

X-mirage

将 Mac 当作一个 AirPlay 的 Server, 有时候想把手机上的内容播放到大屏幕上这货就有用了 (最近看舌尖上的中国我就是先在手机爱奇艺上离线, 然后投到显示器上看, 一是没广告, 二是屏幕大看着才爽吧), 或者要给人演示手机上的功能或录像, 在手机上操作太蛋疼, 还是投到大显示器或投影仪上看才好

搜类似解决方案之前很多建议都是 AirServer, 但是这货要钱, 我又想矜持点不用盗版, 试过免费实现又各种不靠谱, 然后才发现 X-mirage 这货也挺好用, 官网是 http://www.x-mirage.com/index.html. 在 stacksocial 上偶尔有限免, 我是上次限免直接免费弄到的, 最近又有, 还有三天结束, 欲购从速: https://stacksocial.com/sales/the-mac-freebie-bundle-3-0

Alfred

据说一定要用带 Powerpack 的 2.x 才爽, 不过自己找破解试了下对 Powerpack 好像也没太大需求, 就还是用的免费版. 此等神器的各种教程网上一搜一大把, 我就不班门弄斧了

看到不少地方有组织几个人一起团 family license 省点钱, 但实际上非 family 成员使用 family license 还是违反协议的, 只是大家觉得自己付钱了相对心安理得一点吧

Chrome 的豆瓣电台应用

懒得再开个浏览器窗口, 用的也很方便, 安装地址 https://chrome.google.com/webstore/detail/%E8%B1%86%E7%93%A3%E7%94%B5%E5%8F%B0/pildlfoeifnhlckepgfiphlnaphcfhfh

Mac 锁屏的各种方法

2018-06 更新:从 macOS 10.13.x 开始,苹果官方提供了 Ctrl+Cmd+Q 的快速锁屏快捷键,可以通过点菜单栏左上角苹果小按钮,在下拉菜单关机下面看到


之前用 Windows, 习惯了 Win+L 的快捷键锁屏, 暂时离开电脑时可以很方便的锁定机器避免被人恶搞, 最主要还是一个安全的习惯. 但是换 MacBook 后遇到的大问题之一就是没找到锁屏快捷键… Cmd+L 啥都不是, 尝试过的方法包括

合上盖子

如同 Windows 的笔记本, 合上盖子实际上并不是锁定 (Lock screen), 而是进入睡眠 (Sleep), 这样会断网, 直接后果就是下载会断, 远程连接也会断掉, 如果有持续跑的程序也会挂掉. 我在 Windows 下会把合上盖子的默认操作换成什么都不做, 就算是去开会或临时把本带到别的地方, 一合盖子就走到了打开还是之前的状态, 如果需要锁着电脑跑程序或下载, 就按 Win+L 再合盖, 方便快捷

合盖子的另一个问题是, 如果开机状态下接了外接显示器, 合上盖子只是把笔记本自己的屏幕输出给关掉, 其他什么都没影响, 完全没起到锁屏的作用, 不管是 Mac 还是 Win 都一样

短按电源键 (Power)

去搜索 OS X 怎么锁屏, 很多地方会提到短按电源键, 可惜这个也是睡眠, 问题同上

设置触发角进入屏保

不少教程也是教的这个, 大致流程如下

  1. 进入 系统偏好设置
  2. 安全性与隐私 设定页, 通用 标签卡里将 进入睡眠或开始屏幕保护程序后要求输入密码 的时间改成 立即
  3. 桌面与屏幕保护程序 设定页, 屏幕保护程序 标签卡右下角设定 触发角, 行为选 将显示器置入睡眠状态

注:

  • 第 2 步也可以在 Mission Control 设定页的左下角找到 触发角 的设置
  • 第 3 步的触发行为也可以选 启动屏幕保护程序, 但是这样就不是我想要的完全黑屏那种锁法

设定好后, 把鼠标移动到屏幕上对应的角落, 停留一下就会触发设定的行为. 不过触发角的误触发概率远高于正常期望行为, 超级坑. 如果设定触发行为时按住 Cmd, 让触发行为变成鼠标停留角落且按 Cmd 才起作用, 这样似乎又有点反应迟钝. 反正我是试了下就放弃了触发角的方式

使用钥匙串

这个方法的出场率一点也不低于触发角

钥匙串访问 的偏好设置中, 通用 标签卡里将 在菜单栏中显示钥匙串状态, 然后在菜单栏就可以看到一把锁的图标, 点击那个锁就有 锁定屏幕 的选项

这个方式相比较触发角确实误操作率下降了, 但是要用鼠标移动到一个特定位置再点击, 复杂度又上去了, 不爽

用脚本/命令

在各种搜索 “lock mac” 的过程中居然还找到可以用脚本锁屏, 大体参见 http://apple.stackexchange.com/questions/73995/how-do-i-lock-the-screen-using-a-keyboard-shortcut-on-os-x-mountain-lion-with-a 里的说法, 我试过脚本可以运行, 但是触发出来是 Windows 下快速切换用户而不是锁屏的效果, 即屏幕还有显示且是选择登陆用户的界面. 不过怎么触发脚本运行太麻烦了, 没继续尝试

http://apple.stackexchange.com/questions/111485/how-to-lock-screen-on-macbook-air 里还提到了另一个在 OS X 10.9 下的 pmset displaysleepnow 命令, 亲测可用且是锁屏, 不过还是触发麻烦的问题没法解决

用 Alfred

Alfred 这个神器默认带了 Lock 这个系统指令, 唤起 Alfred 后输 Lock 就可以在 PC 键盘上也唤起锁屏了, 可惜这个一是操作略麻烦, 二是实际效果还是快速切换用户而不是锁屏

如果有土豪买了 Alfred 的 Powerpack, 可以试试看在 Powerpack 里设置用快捷键触发上面的脚本或命令

真正的快捷键

http://apple.stackexchange.com/questions/28164/keyboard-shortcut-to-sleep-a-mac 这个帖里比较完整的提到了各种快捷键 (老键盘上把 Power 换成 Eject 键):

  • Ctrl+Shift+Power: 关闭屏幕
  • Cmd+Opt+Power: 睡眠 (sleep)
  • Cmd+Ctrl+Power: 重启 (restart)
  • Cmd+Ctrl+Opt+Power: 关机 (shutdown)

通过 Ctrl+Shift+Power 终于搞定了怎么键盘快速锁屏, 不过三个键还是不如 Windows 下两个键来的方便, 而且 Mac 键盘没有右 Ctrl, 不像 Windows 就算键盘没有右 Win 键, 手掌张开拇指和小指一个按左 Win 一个按 L, 左右手也都不会很麻烦

映射键

如果用外接键盘, 一般是没有 Power 键的 PC 键盘布局, 不过没关系, 我们有一个在差不多位置但是几乎没人用的 Pause/Break 键, 用 KeyRemap4MacBook (下载地址: https://pqrs.org/macosx/keyremap4macbook/) 里搜 “Pause/Break”, 把这个映射成 Power 就可以了

为了给菜单栏 (menu bar, 也有叫状态栏 status bar 的) 省点空间, 在设置的 MenuBar 选项页把 Show icon in menu bar 关掉就行, 以后想用了再通过各种唤起应用的方式把 KeyRemap4MacBook 找出来就是

OS X 支持 NTFS 读写

苹果的 OS X 明明已经支持 NTFS 分区读写, 但是默认情况还是按只读挂载, 查了些资料小修改了下, 就可以开启原生读写了

# 用 root 身份做如下操作 (高危! 请切记自己在干什么)
sudo -s

cd /sbin
# 将系统自带的挂载程序改名
mv mount_ntfs mount_ntfs_orig
# 新建我们要的挂载脚本并编辑
vim mount_ntfs
#!/bin/sh
/sbin/mount_ntfs_orig -o rw "$@"
# 保存退出后改一下权限
chmod a+x mount_ntfs
# 都搞定了, 退出 root 身份
exit

不过这个方法还有几个小问题要注意

  1. 分区最好有卷标, 默认的 “未命名磁盘” 可能无法挂载. 如遇无法自动挂载可以先在终端下改个名再试
# 获取对应分区的 DiskIdentifier (类似 disk1s1 这样的)
diskutil list
# 分区重命名
diskutil rename disk1s1 newname
  1. 网络上其他方法经常会让把脚本里的挂载参数加上 nobrowse, 这个参数就让挂载的分区不显示成新的移动磁盘, 然后又有一堆方法教怎么在 finder 侧边栏能快速访问这样挂载的 NTFS 分区. 其实 man mount 看明白 -o 参数后面的设定就明白了, 去掉那个画蛇添足的 nobrowse 吧

// 最后这个 nobrowse 的参数, 似乎加上后又是只能在 finder 显示但是不能写, 搜了下也没有合理的解释, 如果不行还是先加回去吧
// 为了方便访问, 可以在 finder 里用 cmd+shift+G 打开跳转, 输 /Volumes 进入所有磁盘目录, 然后在用 cmd+shift+T 将 /Volumes 保存到边栏