デフォルトのキーボードレイアウトを削除または無効にする方法


16

OS X Lionのデフォルトのキーボードレイアウトの1つを削除または無効にすることはできますか?

カスタムキーボードレイアウトを使用していますが、システム全体のデフォルトキーボードレイアウトとして設定することができたので、OSに付属の組み込みの「US」キーボードレイアウトをオフまたは削除できるようにしたいと思いますX.これはスクリーンショットです-チェックボックスが無効になっていることに注意してください:

スクリーンショット

OS X 10.9では、この設定ペインのデザインが変更されましたが、組み込みの「US」キーボードレイアウトを「削除」する方法はまだありません。

スクリーンショット

私はUSキーボードレイアウトを決して使用しないので、それを取り除きたい、つまり、メニューバーの[入力]メニューから削除します。これどうやってするの?


更新: ダニエルの答えはこの質問に実際には答えていませんが、この問題に関するいくつかの貴重な情報を提供しています。

Mac OS Xには、システムが選択する「ラテン文字」レイアウトとして認識する少なくとも1つのキーボードレイアウトが必要なようです。

これが正確な情報であると仮定すると(ダニエルに感謝!)、質問は次のように言い換えることができます。

OS Xでカスタムキーボードをラテン文字レイアウトと見なすにはどうすればよいですか?


更新: 役立つ可能性のあるものに出会いました。


1
「ラテン語」だけでは不十分だと思います。これは、キーボードIDをローマ字に設定することにより、ウケレレで簡単に実現できます。あなたのレイアウトも、system / library / keyboardレイアウトのAppleKeyboardLayouts.bundleの一部である必要があると思います。
トムGewecke

回答:


20
  1. システム環境設定の物理キーボードレイアウトとは異なる入力ソースを有効にします(アフガンダリを使用しました)。
  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)。ありがとう!リソースへのリンクを含む新しい回答を投稿して、賞金を得ることができますか?
マティアス・バイネンズ

1
@MathiasBynens回答とウェブサイトを編集しました。2番目の方法をもう一度試したときに、変更を適用するために再起動する必要もありました。
Lri

4
コンピューターを再起動すると、OS X 10.9で正常に動作します。ただし、plistファイルから一時レイアウトも削除し、「sudo reboot」を使用して再起動する必要がありました。そうしないと、通常の再起動時に一時レイアウトが追加されます。
無名_1

2
@Lri 10.9では、:AppleEnabledInputSources:0(古いデフォルトのレイアウト項目)と:AppleInputSourceHistory:辞書(PlistBuddyを使用)を削除する必要がありました。再起動は不要ですが、ログオフのみが必要です。
ロルカウ

1
ヨセミテでは動作しません。Xcodeでファイルを変更するたびに、数秒後に復元されます。誰があなたがそれをどのように正確に行ったか説明できますか?
サイモンペレペリツァ14年

7

と思われる、あなたがシステムにいくつかまだ未知のハックせずに、あなたがやりたいことはできません。Mac OS Xには、システムが選択する「ラテン文字」レイアウトとして認識する少なくとも1つのキーボードレイアウトが必要なようです。これにより、ログイン画面などでパスワードを入力できなくなります。フランス語、カナダ、またはシステムがラテン文字として認識する別のキーボードレイアウトを選択した場合、USレイアウトを選択解除できます。

問題は、ラテン文字を含むカスタムレイアウトがシステムによってラテンキーボードレイアウトとして認識されないため、選択された唯一のキーボードレイアウトにならないことです。詳細については、この質問を参照してください(残念ながら素晴らしい答えがありません)。

この質問に対する素晴らしい回答があなたの質問にも答えることに注意してください。残念ながら、ここでの私の答えは問題が何であるかを明確にするだけですが、私はあなたのための段階的な解決策はありません。このようなハッキングは可能かもしれませんが、特定のカスタムキーボードが唯一の選択可能なキーボードとして安全に使用できることをMac OS Xに納得させる方法を誰かが見つけたという証拠は見当たりません。


@Lriあなたは正しいと思うが、それをテストするためのハードウェアを持っていない。おそらくこのサイトの読者がいるでしょうか?
ダニエル

7

完全を期すために、これをバグ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
チェック済み:レイアウトはこれらの基準を満たしていますが、デフォルトのレイアウトとして認識されていません。そのため、エンジニアは完全な情報を提供しなかったか、または誤った情報を提供したようです。
無名_1

1
@DmitryDulepovこれをデフォルトのレイアウトとして使用することは可能ですが、もう一方を削除するボタンはまだアクティブになりません。あなたはに私のコメントを参照してください(手動でそれを行う必要がありますLRIの答え
RolKau

@RolKau、はい、しかし後で他の問題があります。複数のレイアウトがある場合、一部のアプリでは新しいカスタムレイアウトを使用できません。たとえば、AppStoreの検索バーで切り替えることはできません。少なくとも、できませんでした。
無名_1


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値のリストがありますか?カスタムキーボードレイアウトでこのような値を取得することは可能ですか?'その場合、プロパティを単純にオーバーライドできます。

また、AppleEnabledInputSourcesAppleInputSourceHistory、およびAppleSelectedInputSourcesプロパティはすべて、それらの値は、セットアップアシスタントを実行しているときに私が最初に選択されたネイティブOS Xのキーボードレイアウトに対応して、カスタムキーボードレイアウトを無視するように見えます。


別の更新: Aha!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"に、明らかにカスタムキーボードレイアウト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の対応。システム環境設定で別のキーボードレイアウトが選択された場合、システムのデフォルトのキーボードレイアウトを削除できるようにしたかった:

エンジニアリングは、これがAppleが取り組むべき問題ではないと判断しました。

このカスタムキーボードレイアウトがバンドルされている(の.keylayoutようなバンドル内にあるfoo.bundle/Contents/Resources/foo.keylayout)と仮定すると、これはInfo.plistKLInfo_ 辞書に挿入するのと同じくらい簡単です:

<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.plistfileをダブルクリックするかopen、コマンドラインで使用して開きます。これにより、XCodeがポップアップし、追加のコンポーネントをインストールする場合があります。
  3. XCodeが最終的にファイルの構造を表示するまで、手順2を繰り返します。
  4. AppleEnabledInputSourcesノードを見つけて展開します。
  5. 削除するレイアウトのエントリを削除します。
  6. ファイルを保存し、XCodeを終了します。

これを最後に行うには、おそらくログアウトするか再起動する必要があります。何らかの更新のためにとにかく再起動する必要があったので、それは私のためにトリックをしました。今、私は喜んでNeoで苦痛に満ちた氷河の速さでタイピングしていますが、QWERTZが1つも見えません!


0

ここにアイデアがあります:カスタムレイアウトのキーボードIDがローマに設定されていることを確認した後、そのレイアウトのみを含むカスタムAppleKeyboardLayouts.bundleを作成し、これをOSに付属するものに置き換えます。(.bundleの作成に何が関係しているかはわかりません)


0

Ukeleleを使用して、使用中のレイアウトをラテン文字を使用するレイアウトとしてマークできます。バンドルとしてエクスポートし、インストールしてから、米国のバンドルを削除できます。


-1

簡単にできます。最初にカスタムレイアウトに変更し(メニューバーの[入力]メニューを使用)、次に USレイアウトの選択を解除します。


私のカスタムレイアウトは現在使用中のレイアウトです。質問で述べたように、私はもうUSキーボードレイアウトを使用しません。
マティアスバイネンズ

私は米国のキーボードレイアウトなしで生活しており、選択を解除しても問題ありませんでした。私が持っている他のカスタマイズは、デフォルトではなく、米国以外の地域と言語です。
-shpokas

最初にMacをセットアップするときに選択したキーボードレイアウトの選択を解除できますか?
マティアスバイネンズ

はい、地域を変更することもできます。
shpokas

ほら、それが問題だ。削除または無効化できないOS Xの組み込みキーボードレイアウトのいずれかが常にあります。
マティアスバイネンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.