Quantcast
Channel: Felix021
Viewing all articles
Browse latest Browse all 125

Mac 关闭内置显示器

$
0
0
// 日常吐槽莎币苹果。

MacOS 有很多很蠢的地方,比如没有快捷键可以让窗口在屏幕间移动;比如不能右键直接创建空文件;比如右键菜单有「复制」和「拷贝」两个选项;比如会莫名其妙出现左右声道不平衡的 bug 并且长期未修复;

再比如,不能在外接显示屏的情况下关闭内屏。

当然也不是完全不能,网友也有一些解决方案:

1. 合上屏幕当主机用,自然就息屏了。不过我需要用 mac 的键盘、触摸板和 TouchID 解锁。过。

2. 随身携带磁铁,欺骗 macOS 屏幕已经关闭。这可能是种行为艺术,可惜我不是艺术家。过。

3. SwitchResX,试了下,确实可以把内屏关闭,只不过拔了外显内屏还是关着的,折腾了几下甚至 mac 都不能识别外显了,重启才解决。卸。

4. 在「系统设置 -> 显示」里,将背光拉到 0;不能直接用 Fn 调节屏幕亮度,因为会把外接屏亮度一起调低(莎币值+1);而且每次接上外显或 wakeup 时,都要重新设置。过……吧?

好在作为一名码农,可以想一些自动化的方式来把方案 4 利用起来。

首先是用 brew install brightness ,可以用 `brightness -d 1 0` 把 display 1 的亮度调到 0 (注意把主屏设置为外接屏,且把内屏设置为拷贝外屏,这样内屏的编号就是 1,外显是 0)。

其次是有一个叫 hammerspoon 的软件(https://www.hammerspoon.org/),可以在 unlock 的时候自动执行一个 lua 脚本。

把下面这个 lua 脚本存为 ~/.hammerspoon/init.lua

-- init.lua 
    local log = hs.logger.new("", "info")

    local function ok2str(ok)
        if ok then return "ok" else return "fail" end
    end

    hs.caffeinate.watcher.new(function(event)
        local eventName = hs.caffeinate.watcher[event]
        log.f("got caffeinate event:%s (id:%d)", eventName, event)
   
        local script

        if event == hs.caffeinate.watcher.screensDidLock then     
            script = "${HOME}/.lock"
        elseif event == hs.caffeinate.watcher.screensDidUnlock then
            script = "${HOME}/.unlock"
        else       
            log.f("ignored event:%s (id:%d)", eventName, event)
            return
        end
   
        local ok, st, n = os.execute(script)
        log.f("exec:%s -> %s, %s, %d", script, ok2str(ok), st, n)
    end
    ):start()



然后再 touch ~/.unlock && chmod +x ~/.unlock,内容为:

#!/bin/bash

export PATH=$PATH:/usr/local/bin/

brightness -d 1 0
sleep 5 && brightness -d 1 0


sleep 5 是因为从睡眠状态恢复时,识别外屏会比较慢,可按需调整 sleep 时长。


如果你看到这里,说明你也需要注意日常用电脑的姿势了,避免头颈前倾。

(完)。

Viewing all articles
Browse latest Browse all 125

Trending Articles