如何删除或禁用默认键盘布局?


17

是否可以删除或禁用OS X Lion的默认键盘布局之一?

我使用的是自定义键盘布局,现在我设法将其设置为系统范围内的默认键盘布局,我希望能够取消选中或删除操作系统随附的内置“ US”键盘布局X.这是屏幕截图—请注意,该复选框已禁用:

屏幕截图

在OS X 10.9中,此首选项窗格已经过重新设计,但是仍然无法“删除”内置的“ US”键盘布局:

屏幕截图

由于我从不使用美式键盘布局,因此我希望摆脱它,即从菜单栏中的“输入”菜单中将其删除。我怎样才能做到这一点?


更新: Daniel的回答并未真正回答此问题,但确实提供了有关此问题的一些有价值的信息:

Mac OS X似乎至少需要选择一种键盘布局,系统才能将其识别为“拉丁字符”布局。

假设这是准确的信息(感谢Daniel,),则问题可以表述如下:

如何使OS X将自定义键盘视为拉丁字符布局?


更新: 我刚遇到一些可能会有所帮助的事情。


1
我认为“拉丁”绰绰有余。在Ukelele中,将键盘ID设置为Roman即可轻松实现。我怀疑您的布局还必须是系统/库/键盘布局中AppleKeyboardLayouts.bundle的一部分。
— Tom Gewecke 2012年

Answers:


21
  1. 在“系统偏好设置”中启用与您的物理键盘布局不同的输入源(我使用了阿富汗语Dari)。
  2. 运行f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e。
  3. 删除除临时启用的键盘布局和自定义键盘布局以外的其他输入源。
  4. 注销并重新登录。
  5. 从属性列表中删除临时启用的键盘布局。
  6. 注销并重新登录。

编辑:上面的方法似乎已在10.9中停止工作。尽管这在10.9或10.8中都有效:

  1. 将当前输入源更改为自定义键盘布局。
  2. 打开~/Library/Preferences/com.apple.HIToolbox.plist(在10.9中)或~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist(在10.8及更早版本中)。您可以使用将plist转换为XML plutil -convert xml1。
  3. 从AppleEnabledInputSources词典中删除要禁用的一个或多个输入源。如果有AppleDefaultAsciiInputSource钥匙,请将其删除。
  4. 重新开始。

1
啊哈,如果您重新启动计算机而不是仅注销并重新登录(步骤4),它似乎确实可以工作。谢谢!您介意发布一个新答案并附带指向您资源的链接,以便获得赏金吗?
— Mathias Bynens 2013年

1
@MathiasBynens我编辑了答案和我的网站。当我再次尝试第二种方法时,我还需要重新启动以应用更改。
— Lri

4
如果重新启动计算机,则在OS X 10.9中工作正常。但是我也必须从plist文件中删除临时布局,然后使用“ sudo reboot”重新启动,否则临时布局会在正常重启后重新添加。
— Unname_1 2013年

2
@Lri在10.9上,我必须删除:AppleEnabledInputSources:0(旧的默认布局项目)和:AppleInputSourceHistory:字典(使用PlistBuddy)。无需重新启动,而仅需要注销。
— RolKau 2013年

1
对我来说,它不适用于优胜美地。每当我在Xcode中更改文件时,它都会在几秒钟后恢复。谁能解释您是如何做到的?
— Simon Perepelitsa 2014年

7

如果没有对系统进行一些尚未发现的破解,您似乎无法做您想做的事情。Mac OS X似乎至少需要选择一种键盘布局,系统才能将其识别为“拉丁字符”布局。这样可以防止您无法在登录屏幕等上输入密码。如果您选择了法语,加拿大语或系统识别为拉丁字符的其他键盘布局,则可以取消选择美国布局。

您的问题是您的自定义布局包含拉丁字符,但系统无法将其识别为拉丁键盘布局,因此不能成为唯一选择的键盘布局。有关更多信息,请参见此问题(严重缺少一个很好的答案)。

请注意,对该问题的一个很好的答案也会回答您的问题。las,我在这里的答案仅能弄清楚问题出在哪里,但是我没有逐步解决的方法。尽管可能会发生这种黑客攻击,但我看不出有任何证据表明有人能说服Mac OS X特定的定制键盘可以安全地用作唯一的可选键盘。


@Lri我怀疑您是正确的,但没有用于测试该硬件的硬件。也许这个网站的读者可以吗?
— 丹尼尔

7

为了完整起见,我将其作为Bug ID#11137961提交给Apple,这是我得到的响应:

错误ID#: 11137961
错误标题:使用自定义键盘时,允许禁用默认(内置)键盘布局


工程根据以下信息确定此问题的行为符合预期:

如果问题只是使您的键盘布局被识别为支持ASCII,那么最简单的方法就是“捆绑”您的.keylayout,那么您的Info.plist可以包含一个“ KLInfo_”字典来进一步描述它,例如:

 <key>TISIntendedLanguage</key>
 <string>en</string>   # BCP 47 language string

我需要对此进行更多研究,但是看起来TIS会扫描键盘布局输出以产生USet,并通过是否通过以下最小测试来产生初步的耐心性:

 uset_containsRange(uSet, 0x0020, 0x0021) && uset_containsRange(uSet, 0x002C, 0x0039) &&
 uset_containsRange(uSet, 0x003F, 0x005A) && uset_containsRange(uSet, 0x0061, 0x007A);

TIS还将检查上述语言环境的示例集,并要求该范围内的十几个字符[a-z]。

有关捆绑a的一些建议.keylayout,另请参阅 TextInputSources.h。

如果这仍然是问题,或者您对解决此问题有疑问,请使用该信息更新错误报告。

现在,我们正在关闭此错误报告。


1
已检查:我的布局符合这些条件,但未被识别为可能的默认布局。因此,他们的工程师似乎没有提供完整的信息或提供了错误的信息。
— Unname_1 2013年

1
@DmitryDulepov可以将其用作默认布局,但是删除另一个按钮仍然不会被激活;您将必须手动执行此操作(请参阅我对Lri答案的
— RolKau,2013年

@RolKau,是的,但是稍后还有其他问题。如果您有多个布局,则新的自定义布局将在某些应用程序中不可用。例如,您将无法在AppStore的搜索栏中切换到它。至少我做不到。
— Unname_1 2013年


1

我刚遇到可能会有所帮助的事情。开始:

$ defaults read /Library/Preferences/com.apple.HIToolbox.plist 
{
    AppleCurrentKeyboardLayoutInputSourceID = "com.apple.keylayout.Dutch";
    AppleDefaultAsciiInputSource =     {
        InputSourceKind = "Keyboard Layout";
        "KeyboardLayout ID" = 1337;
        "KeyboardLayout Name" = QWERTY;
    };
    AppleEnabledInputSources =     (
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 26;
            "KeyboardLayout Name" = Dutch;
        }
    );
    AppleInputSourceHistory =     (
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 26;
            "KeyboardLayout Name" = Dutch;
        }
    );
    AppleSelectedInputSources =     (
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 26;
            "KeyboardLayout Name" = Dutch;
        }
    );
}

在我的系统上,这是我的自定义键盘布局(名为“ QWERTY”)的默认设置。请注意,KeyboardLayout Name和KeyboardLayout ID属性是指.keylayout文件开头的ID和名称。

如您所见,defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID仍然返回字符串"com.apple.keylayout.Dutch"。是否有可用com.apple.keylayout值的清单?是否可以为自定义键盘布局获得这样的值?因为在这种情况下,我们可以简单地覆盖该属性。

此外,AppleEnabledInputSources,AppleInputSourceHistory,和AppleSelectedInputSources性能都似乎忽略了自定义的键盘布局,因为它们的值对应于在运行安装助手时,我最初选择的本地OS X的键盘布局。


另一个更新:啊哈!似乎还有另一个plist文件可以用来复制设置。

$ defaults read ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist 
{
    AppleCurrentKeyboardLayoutInputSourceID = "org.unknown.keylayout.QWERTY";
    AppleDateResID =     {
        smRoman = 2;
    };
    AppleEnabledInputSources =     (
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 26;
            "KeyboardLayout Name" = Dutch;
        },
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 1337;
            "KeyboardLayout Name" = QWERTY;
        },
                {
            "Bundle ID" = "com.apple.CharacterPaletteIM";
            InputSourceKind = "Non Keyboard Input Method";
        },
                {
            "Bundle ID" = "com.apple.KeyboardViewer";
            InputSourceKind = "Non Keyboard Input Method";
        },
                {
            "Bundle ID" = "com.apple.inputmethod.ironwood";
            InputSourceKind = "Non Keyboard Input Method";
        }
    );
    AppleGlobalTextInputProperties =     {
        TextInputGlobalPropertyPerContextInput = 0;
    };
    AppleInputSourceHistory =     (
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 1337;
            "KeyboardLayout Name" = QWERTY;
        },
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 26;
            "KeyboardLayout Name" = Dutch;
        }
    );
    AppleNumberResID =     {
        smRoman = 2;
    };
    AppleSelectedInputSources =     (
                {
            InputSourceKind = "Keyboard Layout";
            "KeyboardLayout ID" = 1337;
            "KeyboardLayout Name" = QWERTY;
        },
                {
            "Bundle ID" = "com.apple.inputmethod.ironwood";
            InputSourceKind = "Non Keyboard Input Method";
        }
    );
    AppleTimeResID =     {
        smRoman = 2;
    };
}

如您所见(AppleCurrentKeyboardLayoutInputSourceID),显然,自定义键盘布局获得的值类似于"org.unknown.keylayout.FOO"where FOO是键盘布局的名称(在.keylayout文件中指定)。

因此,让我们尝试将所有值设置为我们的自定义键盘布局,命名QWERTY和ID 1337(在.keylayout文件中指定):

sudo defaults write /Library/Preferences/ByHost/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID -string "org.unknown.keylayout.QWERTY"

可悲的是,这似乎不起作用。

更新: @Lri发现了一种可靠的方法-请参阅他的答案。


1

苹果对我的错误报告的回应,我在其中要求通过“系统偏好设置”选择其他键盘布局来删除系统默认键盘布局:

工程部门已确定这不是Apple要解决的问题。

假设此自定义键盘布局是捆绑在一起的(.keylayout位于像一样的捆绑中foo.bundle/Contents/Resources/foo.keylayout),那么这就像插入Info.plist的KLInfo_ 字典一样简单:

<key>KLInfo_Qwerty</key>
<dict>
  <key>TISInputSourceID</key>
  <string>com.imgur.stack.keyboardlayout.Qwerty</string>
  <key>TISIntendedLanguage</key>  
  <string>en</string> 
</dict>

如果需要在整个系统范围内使用此布局(即包括密码输入),可以将其安装在中/Library/Keyboard Layouts/,而不是安装在中的相同位置~/Library/。

请更新您的错误报告,让我们知道这是否仍然是您的问题。

如果您对解决此问题有疑问,请与他们一起更新错误报告。

请确保定期检查新的Apple产品是否有可能影响此问题的更新。再次感谢您抽出宝贵的时间提交错误。衷心感谢您的宝贵意见。


1

我刚刚使用以下方法成功删除了High Sierra上的默认布局:

  1. 导航到您的Library/Preferences文件夹。
  2. com.apple.HIToolbox.plist通过双击或open在命令行上使用来打开文件文件。这将使XCode弹出,并且可能要安装其他组件。
  3. 重复步骤2,直到XCode最终显示文件的结构。
  4. 找到AppleEnabledInputSources节点并将其展开。
  5. 删除要删除的布局的条目。
  6. 保存该文件并退出XCode。

现在您可能需要注销或重新启动才能完成此操作。无论如何,我不得不重新启动以进行一些更新,所以对我来说是成功的窍门。现在,我很高兴以令人痛苦的冰川速度在Neo中打字,但是看不到一个QWERTZ!


0

这是一个主意:在确保将自定义布局的键盘ID设置为Roman后,创建一个自定义AppleKeyboardLayouts.bundle,其中仅包含该布局,并将其替换为操作系统随附的布局。(我不知道自己创建.bundle涉及什么)


0

您可以使用Ukelele将使用的布局标记为使用拉丁脚本的布局。导出为捆绑软件,进行安装,然后就可以删除美式计算机了。


-1

这很容易做到。首先更改为自定义布局(使用菜单栏的输入菜单),然后取消选择美国布局。


我的自定义布局是当前正在使用的布局。如问题中所述,我不再使用美式键盘布局。
— Mathias Bynens 2012年

我没有美国键盘布局,也没有取消它的问题。我拥有的其他自定义设置是非默认,非美国地区和语言。
— shpokas 2012年

您可以取消选择最初设置Mac时选择的键盘布局吗?
— Mathias Bynens 2012年

是的,我也可以更改区域。
— shpokas 2012年

瞧,这就是问题所在。始终存在无法删除或禁用的OS X内置键盘布局之一。
— Mathias Bynens 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.