从 Mac 上的命令行启用/禁用 Fn 键

Posted

技术标签:

【中文标题】从 Mac 上的命令行启用/禁用 Fn 键【英文标题】:Enable/Disable Fn keys from the command line on the Mac 【发布时间】:2010-08-10 04:50:23 【问题描述】:

我几乎从不使用我的 macbook pro 上的功能键。我主要只是将它们用于音量、亮度等。现在我已经开始玩星际争霸 2 了,我想使用它们而不必按下 fn 键。

我想编写一个小 shell 脚本来翻转“使用所有 F1、F2 等键作为标准功能键”复选框。我在想我可以使用 defaults 命令来更改它,但我不确定要使用什么值。这样我就不必每次想玩时都改变偏好。我可以运行脚本来切换按键,甚至启动游戏。

有什么想法吗?

【问题讨论】:

这个问题可能很老了,但是在搜索排名中还是挺高的。对于现在找到它的任何人,有一个名为 Palua (molowa.com/mac-os-x/palua/palua-3-0) 的应用程序可以为您翻转状态,包括智能地切换应用程序。还有 FunctionFlip (kevingessner.com/software/functionflip),它只永久翻转键的子集。 【参考方案1】:

应该可以解决问题的 AppleScript —— 取自 http://scriptbuilders.net/files/fn1.1.html,稍作修改

--Check if GUI Scripting is Enabled
tell application "System Events"
    if not UI elements enabled then
        set UI elements enabled to true
    end if
end tell

--Enable/Disable "Use all F1, F2, etc. keys as standard function keys" option in Keyboard & Mouse Preference pane and close System Preferences
tell application "System Events"
    tell application "System Preferences"
        reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
    end tell
    click checkbox 1 of tab group 1 of window 1 of application process "System Preferences"
end tell
if application "System Preferences" is running then
    tell application "System Preferences" to quit
end if

在 MacOS 10.6.4 上测试

【讨论】:

这个技术上不是命令行解决方案,因为它使用 AppleScript 来访问 GUI 元素,因此离开了命令行。 如果你真的想要,你可以使用osascript << EOF [paste script here] EOF在命令行上运行它 正如广告添加的注释一样,我刚刚在 Mavericks 上进行了测试并收到了错误消息。它不适用于小牛队。【参考方案2】:

命令是defaults write -g com.apple.keyboard.fnState,尽管我在过去更改它时遇到过问题。我最终只使用了 AppleScript。试试看吧。

defaults write -g com.apple.keyboard.fnState -boolean true

编辑详细地说,我遇到的问题是实际值已更改,但它不会主动更改系统偏好设置中的设置,fnState 也不会切换,因为该文件仅在启动/登录等时读取。此外,更改由另一个任务打开的配置文件听起来是破坏文件的好方法。

【讨论】:

据我所知,defaults 命令与简单地更改文件不同。我的印象是它被键入操作系统的默认/首选项机制,它应该通知任何关心的应用程序。 正如广告添加的注释一样,我刚刚在 Mavericks 上进行了测试,没有任何功能结果。【参考方案3】:

您可以安装 awsome Karabiner-Elements。

在系统偏好设置-> 键盘偏好设置下,确保选中“使用所有 F1、F2 等键作为标准功能键”作为附加选项。

打开 KeyRemap4MacBook 首选项。 导航到“直通模式”选项。 勾选“更改 Fn+Escape 以切换“通过模式” 打开“更改 F1..F19 键”并检查“Macbook Pro”或“Macbook Air”选项,选择正确的 Mac 类型。

【讨论】:

也可以使用k=/Applications/KeyRemap4MacBook.app/Contents/Applications/KeyRemap4MacBook_cli.app/Contents/MacOS/KeyRemap4MacBook_cli; s=remap.functional2fn_2008; $k changed | grep -q $s && $k disable $s || $k enable $s 之类的东西来切换设置。有关预定义设置的标识符,请参见 Tests/lib/string/data/checkbox.xml。 应用程序链接已失效。你有镜子吗? @EthanZ 是的。将其更新为 pqrs.org/osx/karabiner - 他们更改了名称【参考方案4】:

对于其他试图完成这项工作的人 - 我终于得到了我的解决方案。测试:MacOS Big Sur,11.4,2021 年 6 月。

代码基于这里: https://github.com/MrSimonC/Toggle-Mac-Function-Keys

但为了简洁,这里是苹果脚本文件的内容:

-- Apple Script (i.e. Use in Apple's Script Editor Application) to Toggle Function Keys / Media keys on/off
-- Tested on MacOS Big Sur (11.4) June 2021
-- Project Path: https://github.com/MrSimonC/Toggle-Mac-Function-Keys

tell application "System Preferences"
    set current pane to pane "com.apple.preference.keyboard"
end tell

tell application "System Events"
    if UI elements enabled then
        tell application process "System Preferences"
            repeat until exists tab group 1 of window "Keyboard"
                delay 0.5
            end repeat
            click radio button "Keyboard" of tab group 1 of window "Keyboard"
            click checkbox "Use F1, F2, etc. keys as standard function keys" of tab group 1 of window "Keyboard"
        end tell
        tell application "System Preferences" to quit
    else
        -- GUI scripting not enabled.  Display an alert
        tell application "System Preferences"
            activate
            set current pane to pane "com.apple.preference.security"
            display dialog "UI element scripting is not enabled. Please activate this app under Privacy -> Accessibility so it can access the settings it needs."
        end tell
    end if
end tell

希望有人觉得它有用!

【讨论】:

以上是关于从 Mac 上的命令行启用/禁用 Fn 键的主要内容,如果未能解决你的问题,请参考以下文章

从命令行启用/禁用 Windows 10 中的设备 [关闭]

怎样用命令行禁用网卡

怎样用命令行禁用网卡

使用命令行启用/禁用谷歌浏览器扩展

Mac 上的 CoreBluetooth 命令行应用程序

从Mac OSX终端命令行关闭macbook上的wifi: