Ansible을 사용하여 Ubuntu에서 사용자 정의 키보드 레이아웃 추가

나는 몇 년 동안 US Dvorak 레이아웃의 약간 맞춤 수정된 버전을 사용해 왔으며 컴퓨터 설정을 자동화하는 것을 좋아합니다.

키보드 레이아웃 설정을 자동화하는 것은 항상 번거로운 일처럼 보였기 때문에 지금까지 스스로 해보지 못했습니다.

Ubuntu에서 사용자 정의 키보드 레이아웃을 추가하는 방법은 무엇입니까?



다음이 필요합니다.
  • /usr/share/X11/xkb/symbols/ 아래에 있는 기능적인 xkb 키보드 레이아웃
  • /usr/share/X11/xkb/rules/ 아래의 *.lst 파일 중 하나에 있는 항목
  • 동일한 규칙 디렉토리 아래에 해당하는 *.xml 파일의 항목

  • 이 모든 작업이 완료되면 sudo dpkg-reconfigure xkeyboard-data 명령을 실행하여 설치에서 구성된 키보드 레이아웃을 다시 로드해야 합니다. 이렇게 하면 데스크탑 환경 또는 창 관리자(Gnome, KDE, i3, XMonad 등)가 변경 사항을 선택하고 로그인 화면에서도 사용할 수 있도록 사용자 정의 키보드 레이아웃을 선택할 수 있습니다.

    XKB 레이아웃



    내 레이아웃은 기본적으로 스웨덴어(å, ö, ä, é 및 매우 드물게 사용되는 ü)에서 사용되는 움라우트 및 기타 항목이 있는 일부 문자를 추가하여 표준 미국 Dvorak 레이아웃을 수정한 것입니다. altgr 키를 누른 상태에서 a , o , e , u , y 키를 각각 눌러 액세스합니다(즉, Dvorak 레이아웃을 모르는 사람들을 위해 키입니다. 일반적으로 a , s , d , f , t 문자가 있습니다.

    이렇게 생겼어요

    // This is basically a US Dvorak with some (mostly) Swedish accented characters added
    // å -> alt-gr a
    // ä -> alt-gr e
    // ö -> alt-gr o
    // é -> alt-gr u
    // ü -> alt-gr y
    
    default partial alphanumeric_keys
    xkb_symbols "dvorak" {
        include "us(dvorak)"
        include "level3(caps_switch)"
        include "level3(ralt_switch)"
    
        name[Group1] = "Swedish (Frost Dvorak)";
    
        //             Unmodified       Shift           AltGr            Shift+AltGr
    
        // // symbols row, left side
        key <AD05> { [ y,               Y,              udiaeresis,      Udiaeresis ] };
    
        // home row, left side
        key <AC01> { [ a,               A,              aring,           Aring      ] };
        key <AC02> { [ o,               O,              odiaeresis,      Odiaeresis ] };
        key <AC03> { [ e,               E,              adiaeresis,      Adiaeresis ] };
        key <AC04> { [ u,               U,              eacute,          Eacute     ] };
    };
    


    *.lst 항목



    일반적으로 evdev.extras.lst 파일이 있어야 하고 거기에 항목을 추가할 수 있어야 하지만 일부 버그로 인해 작동하지 않아 evdev.lst 파일에 추가해야 합니다.

    이 파일에 ! layouts 섹션에 하나와 ! variants 섹션에 하나, 두 개의 다른 라인을 추가해야 합니다.

    ! 레이아웃




      frost           Swedish (Frost Dvorak)
    


    ! 변종




      dvorak       frost: Swedish (Frost Dvorak)
    


    *.xml 항목



    XML 항목은 첫 번째 항목과 거의 동일한 정보를 제공하지만 형식은 다릅니다.

    다음과 같이 보입니다.

    <layout>
      <configItem>
        <name>frost</name>
        <shortDescription>frost dvorak</shortDescription>
        <description>Swedish</description>
        <languageList>
          <iso639Id>swe</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Swedish (Frost Dvorak)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    


    동일한 버그 관련 내용이 여기에 있으므로 evdev.xml 파일에 추가해야 합니다.

    Ansible을 사용하여 이 모든 것을 자동화



    요전에 설정 스크립트를 살펴보다가 이 모든 작업을 자동화하여 컴퓨터 설정에서 몇 가지 수동 단계를 더 제거할 수 있다는 것을 깨달았습니다. 나는 지난 1년 반 동안 업무용 컴퓨터에 약간의 운이 없었기 때문에 이 작업을 여러 번 해야 했습니다.

    조금 파고들고 테스트한 후에 lineinfile 항목에 *.lst 모듈을 사용하고 XML 항목에 xml 모듈을 사용할 수 있다는 것을 알았습니다.

    뿐만 아니라 Ansible에 dpkg-reconfigure 명령을 자동으로 실행하도록 지시하고 키보드 레이아웃을 구성하도록 지시할 수 있으므로 메뉴를 샅샅이 뒤질 필요가 없습니다!

    다음은 작업별로 사용하는 플레이북 정의입니다.

    키보드 레이아웃 파일 복사




        - name: Copy keyboard layout file
          become: yes
          file:
            src: frost.xkb
            dest: /usr/share/X11/xkb/symbols/frost
            owner: root
            group: root
            mode: '0644'
            state: file
    


    추가! evdev.lst에 대한 레이아웃 항목




        - name: Add layout to evdev.lst
          become: yes
          lineinfile:
            path: /usr/share/X11/xkb/rules/evdev.lst
            insertafter: "! layout"
            line: "  frost           Swedish (Frost Dvorak)"
    


    추가! evdev.lst에 대한 변형 항목




        - name: Add variant to evdev.lst
          become: yes
          lineinfile:
            path: /usr/share/X11/xkb/rules/evdev.lst
            insertafter: "! variant"
            line: "  dvorak       frost: Swedish (Frost Dvorak)"
    


    evdev.xml에 <layout> 항목 추가




    
        - name: Add layout to evdev.xml
          become: yes
          xml:
            path: /usr/share/X11/xkb/rules/evdev.xml
            xpath: /xkbConfigRegistry/layoutList
            backup: yes
            input_type: xml
            add_children:
              - |
                <layout>
                  <configItem>
                    <name>frost</name>
                    <shortDescription>frost dvorak</shortDescription>
                    <description>Swedish</description>
                    <languageList>
                      <iso639Id>swe</iso639Id>
                    </languageList>
                  </configItem>
                  <variantList>
                    <variant>
                      <configItem>
                        <name>dvorak</name>
                        <description>Swedish (Frost Dvorak)</description>
                      </configItem>
                    </variant>
                  </variantList>
                </layout>
    


    xkb-data 재구성




    
        - name: Reconfigure xkb-data
          become: yes
          shell: dpkg-reconfigure xkb-data
    


    그놈 키보드 레이아웃 설정




    
        - name: Set keyboard layout
          become: yes
          become_user: frost
          tags: dconf
          dconf:
            key: "/org/gnome/desktop/input-sources/sources"
            value: "[('xkb', 'frost+dvorak'), ('xkb', 'dvorak')]"
            state: present
    


    모든 프로그램을 종료하지 않고 그놈 쉘을 다시 시작하십시오.




    
        - name: Restart GNOME Shell
          shell: busctl --user call org.gnome.Shell /org/gnome/Shell org.gnome.Shell Eval s 'Meta.restart("Restarting…")'
    
    


    Happü 해킹!

    좋은 웹페이지 즐겨찾기