잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

자꾸 생기는 US키보드 삭제, 제거 본문

Programs/help

자꾸 생기는 US키보드 삭제, 제거

현록 2019. 7. 27. 21:27

*본 포스트를 따라하시면 US키보드를 지워도, 부팅시에 계속 부활하는 현상을 막을 수 있습니다.

부팅시 계정에 키보드 레이아웃을 추가하지 못하도록 권한을 막아버리므로,

결과적으로는 (부팅할 때마다) 키보드 레이아웃이 부활하는 것을 막아줍니다.

 

(특정 프로그램 실행시마다 US키보드가 생기는 현상은,

설정으로 피할 수 없는 현상이기 때문에...

원버튼 US키보드 제거 바로가기로 해결하시길

[Programs/help] - 단발성 US키보드 제거)

 

(US키보드 현상에 대한 연구는 맨 아래에 공유)

 


Windows를 처음 설치할 때,

두번째 키보드 레이아웃으로 English - US 등을 선택하면,

 

Win+Space로 IME 전환이 가능한데,

게임 중에나 나도 모르게 Win키가 눌린 상태로 스페이스바가 눌리거나 해서

IME가 바뀌면 한글이 안 써지고(알아채면 다시 바꾸면 그만이지만)

 

그래서 이 짜증나는 상황을 없애고자(기본 키보드만으로도 한/영 충분하니까)

US 영문 언어를 제거하면..

 

[Win]+[X] 로 뜬 메뉴에서 [설정] > [시간 및 언어]
지역 및 언어 > 해당 언어를 클릭한 후 뜨는 제거버튼

 

쨔쟌 컴퓨터를 킬 때마다 부활(정확하게는 Windows 업데이트가 있는 경우)해있는데,

다시 언어를 제거하려고 들어가면 없는 상황.

구글에 관련 검색을하면 개 빡쳐있는 비 영어권자 유저들이 대다수..

이 개**들은 영문팩만 원하는데 키보드까지 건드리냐고, 또 왜 안지워지고 혼자 남냐고..

 

그래서 이걸 다시 지우려고 다시 저 메뉴에 가면 영어가 없다..??

그래서 지우려는 방법을 찾아보면

영어 언어를 추가했다가 다시 지우세요..??

이걸 키보드가 부활할 때마다 이 짓을 해라구요..??

 


 

다른 방법이 있지 않을까??

검색을 통해 제어판을 통하는 방법을 보면,

이건 Windows 8.1까지 사용되던 방법이고, 이 메뉴는 이제 제어판에서 사라져있다..

비슷하게는 제어판 > 국가 및 지역만 있을 뿐, 언어팩 부분이 사라져있다..

 

..없다고??

좋아 내 파헤쳐서 찾아주겠어..

하고

Windows 운영체제가 설치된 파티션으로 가서,

System32폴더로 갑시다.

(ex. C:\Windows\System32)

여기서 lpksetup.exe라는 애를 찾아줄겁니다.

(키보드 영어상태로 lpk 여러번 치다보면 찾아짐.. 아니면 탐색기 우측 상단에 검색기능을 활용하시든..)

 

이걸 관리자 권한으로 실행합니다.

(혹시 모르니까)

 

그리고 표시 언어 제거로 들어갑니다.

 

(지금 제 사진에는 없지만)

이미 제거한 언어가 덩그러니 남아있는 꼴을 볼 수 있습니다.

네녀석 때문이렸다!?(싶은데 사실 얘가 또 원인은 아님. 얘도 부수적인 결과물인진 몰라도 우선 지워주려고 하기에)

어쨌든 선택해서 지워줍니다.

그리고 재부팅 한 번 해주고 진행합시다. 언어팩이 싹 지워지도록.

여기서 제거한게 Windows 업데이트로 적용되어 좀 시간이 걸릴 수 있습니다.

 

그리고 이제 됐나 싶어서 사용하다보면

또 추가됨..ㅋㅋ

근데 저기에 다시 들어가보면 영어가 또 있는건 아님.

원인은 다른 곳에 있음.

(계정에 설정값이 위험한 상태로 보호되어 있기 때문에,

이걸 건드리기 보다는, 키보드 레이아웃이 추가되지 않도록 막는 방법을 소개합니다.)

 


 

여기서 포기해야 하나요..??

좀 더 가봅시다.

계속 US키보드가 생긴다면..

생기지 못하게 레지스트리를 잠궈봅시다.

 

[]+[R]로 실행을 띄운 후, regedit을 쳐서 레지스트리 편집기를 실행합니다.

(당연히 관리자 권한 필요함)

 

HKEY_USERS\.DEFAULT\Keyboard Layout\Preload로 들어갑니다.

1번 외 다른 번호 항목으로 다른 키보드 레이아웃이 존재하면 이걸 지울 겁니다.

2번을 우클릭해서 아예 2번 자체를 날려주세요.

(English - US라면 데이터 값이 00000409일 겁니다.)

(이렇게 해도 당장은 변화가 없습니다. 이후 재부팅을 하면 키보드 레이아웃이 사라집니다.)

 

근데, Windows 업데이트나 프로그램 설치 등이 있고나면

다시 여기에 2번으로 해당 키보드 레이아웃이 추가됩니다ㅋㅋ

그러면 또 이 짓을 하고 재부팅을 해야겠죠..??

그래서 아예 저 Preload만 잠그려구요.

(시스템적으로 중요한 부분이 아니라고 판단해서 하는 짓입니다만..

우선 저는 문제없이 잘 돌아갔고, 키보드도 아직은 안 부활해서 만족스럽습니다.)

 

Preload 폴더 우클릭 후 사용 권한 들어갑니다.

 

당장은 권한 편집이 안됩니다.(기본 설정이 상위 폴더의 권한을 그대로 물려받도록 되어있음)

고급으로 들어갑니다.

 

상속 사용 안 함 버튼을 눌러주고, 확인을 눌러줍니다.

(Preload의 상위의 상위 폴더인 .DEFAULT의 권한대로 이용하지 않고,

이 폴더만 특별하게 관리하기 위해서입니다.)

 

이제 모든 유저들이 읽기만 되도록,

모든 권한이나 특정 권한을 빼줍니다.

저는 CREATOR OWNER와 SYSTEM이 다른 권한을 갖고 있던데..

여튼 다 확인 하면서 읽기만 가능하도록 해줍니다.

(원래 읽을 수 없는 애는 굳이 읽기를 체크해줄 필요는 없습니다. 근데 아마 다 읽기는 가능한 상태일 듯)

 


제 경험상 이제는 US키보드가 부활하지 않습니다.

뭐 언어팩이 어딘가에 남아있고, 근본을 뿌리뽑지 못했더라도,

레지스트리를 아무도 못 건드리게 막았으니 키보드 레이아웃을 추가하지 못할 것이야..

라는 생각입니다.

우선은 이런 상황이고, 이런데도 부활한다면 다시 연구해보기로..ㅡㅡ

 


 

윈도우 대형업데이트(연단위 업데이트, Windows.old 폴더가 생길 정도로 아예 윈도우가 재설치되는 수준의 초대형 업데이트)를 진행하면,

레지스트리 권한 정보가 초기화되고 다시 상속 해제 및 설정을 해줘야합니다.

근데 권한 설정을 해두니까 정말 키보드 레이아웃이 부활 안하네요. 넘나 좋은 것.

뭐 1년에 한 번 레지스트리 권한 설정 정도야..ㅎ

 

+

Microsoft는 Windows를 이제는 XP→Vista→7→8→8.1→10처럼 새 버전을 내지 않고,

10에서 추가 업데이트로 계속 진행하겠다고 밝혔었다.

Apple의 OSX가 무료 업데이트로 OS를 업그레이드 하듯이.

위에서 말한 연단위 업데이트는 이 대형 업데이트를 말하는 것.

 


Windows 계정에 en-US에 대한 찌꺼기 제거 한 가지를 기술합니다.

(복잡하고 위험한 방법이라 추천드리진 않습니다.)

 

부팅시(업데이트시)에 US키보드가 추가되는 것이 아닌,

특정 프로그램 실행시마다 US키보드가 생기는 현상은

해당 프로그램의 동작 방식의 문제이기 때문에 유저가 해결할 방법은 없습니다.

이 경우는 아래 파트의 단발성 제거 링크를 참고해주세요.

 

찌꺼기 설명▼

더보기

레지스트리 편집기에서,

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SystemProtectedUserData]

경로로 갑니다.

 

하위 폴더마다 각각 AnyoneRead라는 폴더가 있습니다.

그리고 각각 안에 LanguageProfile이라는 폴더가 있습니다.

여기의 "Profile"의 값을 각각 복사하여 메모장에 기록해둡니다.

 

User Profile#Languages+Mko@en-US@&ShowAutoCorrection+D1&ShowTextPrediction+D1&ShowCasing+D1&ShowShiftLock+D1%User Profile/en-US#0409:00000409+D1%User Profile/ko#0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}+D1

 

User Profile#Languages+Mko@&ShowAutoCorrection+D0&ShowTextPrediction+D0&ShowCasing+D0&ShowShiftLock+D0&InputMethodOverride+S0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}&UserLocaleFromLanguageProfileOptOut+D1%User Profile/ko#CachedLanguageName+S@Winlangdb.dll,-1255&0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}+D1%User Profile/ko-KR#CachedLanguageName+S@Winlangdb.dll,-1255

 

User Profile#Languages+Mko@en-US@&ShowAutoCorrection+D1&ShowTextPrediction+D1&ShowCasing+D1&ShowShiftLock+D1%User Profile/en-US#0409:00000409+D1%User Profile/ko#0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}+D1%User Profile/ko-KR#CachedLanguageName+S@Winlangdb.dll,-1255

 

이 값을 en-US가 끼어들기 전의 형태로 바꿀겁니다.

(이 작업은 안전이 보장되어 있지 않습니다.

차라리 포스트의 내용대로 Preload를 잠그는 것으로 만족하셔도 충분합니다.)

 

언어가 2개가 되면서 선호하는 언어나, 표시 언어에 대한 값들도 추가되었는데,

그로인한 녹색 부분은 딱히 지우지 않아도 되니 남겨두도록 하겠습니다.

빨간 부분을 지우거나 수정할겁니다.

 

위의 예시 중 두 번째는 추가된 값들이 있지만, en-US에 대한 부분은 아니니 그대로 두겠습니다.

수정한 예시는 다음과 같습니다.

 

User Profile#Languages+Mko@&ShowAutoCorrection+D0&ShowTextPrediction+D0&ShowCasing+D0&ShowShiftLock+D0%User Profile/ko#0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}+D1

 

User Profile#Languages+Mko@&ShowAutoCorrection+D0&ShowTextPrediction+D0&ShowCasing+D0&ShowShiftLock+D0&InputMethodOverride+S0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}&UserLocaleFromLanguageProfileOptOut+D1%User Profile/ko#CachedLanguageName+S@Winlangdb.dll,-1255&0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}+D1%User Profile/ko-KR#CachedLanguageName+S@Winlangdb.dll,-1255

 

User Profile#Languages+Mko@&ShowAutoCorrection+D0&ShowTextPrediction+D0&ShowCasing+D0&ShowShiftLock+D0%User Profile/ko#0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}+D1%User Profile/ko-KR#CachedLanguageName+S@Winlangdb.dll,-1255

 

이제 이걸 다시 원래의 "Profile"에 수정시켜줘야 하는데,

해당 경로는 Administrator 권한으로도 수정이 안되기 때문에,

상위 권한인 SYSTEM 권한으로 레지스트리 편집기를 실행시켜야 합니다.

 

[Programs/help] - PsExec - 시스템 권한 실행

위 링크의 프로그램을 이용하여,

(psExec -s -i -d regedit)

SYSTEM 권한으로 실행시키면 됩니다.

 

 

딱 봐도...

위험해보이는 과정이죠?

그냥 Preload 경로만 잠그는 것을 추천드립니다;;

 


그럼에도 불구하고,

간혹 특정 프로그램이 실행될 때마다 US키보드가 생기는 분들이 있습니다.

(권한을 싹 막아서 레지스트리는 건드리지 못하지만, 그래도 UI상으로 IME가 나타나고 쓸 수도 있어서..;;)

그럴 땐 아래의 포스트를 참고하여 바로가기를 하나 만들어두고,

윈도우 메뉴에서 클릭 한 번으로 해결하실 수 있습니다.

[Programs/help] - 단발성 US키보드 제거

 


아래는 US 키보드 현상의 연구 상태를 공유합니다.

더보기

US 키보드 제거로 많은 분들이 방문하셔서 팁을 얻고 가고 계십니다.

 

US 키보드는 두 가지 형태로 좀비처럼 부활하고 있습니다.

1. 부팅할 때마다 (본 포스트 내용으로 해결)

2. 어떤 프로그램을 실행할 때마다 (바로 위에 단발성 제거 링크로 해결)

 

두 가지 형태의 차이점은,

1은 Windows 계정 설정과 관련된 사항으로 보이고,

2는 실행한 프로그램과 관련된 사항으로 보입니다.

특히, 2의 경우 거의 다 어떤 키보드 동작 내용이 필요한 프로그램이었습니다.

    원격 제어 프로그램이나 게임(스팀 게임, 피파, ...) 등이었습니다.

 

 

 

아예 컴퓨터의 레지스트리의 모든 값을 내보낸 후,

어떤 프로그램을 실행되게 하여 US 키보드가 생긴 상태에서 레지스트리의 모든 값을 내보내고,

두 파일의 값을 비교해봤습니다.

 

우선,

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Input\Locales\loc_0409\InputMethods\1]

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Input\Locales\loc_0409\InputMethods\1]

Enabled가 각각 0에서 1로 변하더군요.

이 곳을 강제로 권한을 막아서 0으로 고정되게 해봤습니다만,

값이 0인채 여전히 US 키보드가 생겼습니다.

이건 위험하니, 다시 권한을 복구시켰습니다.

 

그리고, 이건 프로그램마다 다를텐데,

[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KeyboardClass]

[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PointerClass]

프로그램 실행시마다

클래스가 하나씩 늘어났습니다.

저는 원격 프로그램인 Moonlight를 실행하면서 비교한 것인데,

원격 프로그램은 키보드나 마우스를 위한 가상 장치를 설정하는 것이 많으니, 그런 것일지도 모르겠습니다.

(얘가 키보드를 건드려서 부활되고 있는 것으로 보입니다.)

강제로 추가되지 못하도록 하기엔 리스크가 너무 크니 손 쓰지 않았습니다.

 

그리고,

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Notifications\Data]

에서도 값이 변하는 곳이 있었습니다.

우측 하단 IME 아이콘과 관련된 곳일 것 같은데,

HEX값이라 임의로 건드리기도 위험하니,

(고정시키기엔 다른 곳에도 영향을 받는 부분이라)

알아도 손 쓸 수 없다고 봐야겠네요.

 

그 외에도 프로그램에 따라 오디오 설정 등도 함께 되었기 때문에

다른 차이점도 있지만,

비교적 관련 없는 곳 같아서 다 적지는 않겠습니다.

 

 

 

그리고 문득 이런 의문이 들었습니다.

US 키보드 사태는 아예 막을 수 없는게 아닐까?

(Windows 개발자가 아닌, 일반 유저의 입장에서는)

 

위에서 구분지은 부활 상황 중,

1은 Windows 업데이트와 관련된 사항이라, 뭔가 찌꺼기 설정값이 남아있어서 그럴 수 있다고 생각했는데,

2는 그냥 프로그램이 실행 전에 키보드의 입력상태를 점검하거나,

    본 프로그램을 위해 키보드의 설정을 세팅하는 것만으로 생겨나고 있습니다.

특히, 2의 상황은, 설치시에 US 키보드를 설정하지 않았던 분들도 나타나는 것으로 보입니다.

즉, 2의 상황은, 유저가 어떤 원인을 찾아서 봉쇄할 수 없이, 그냥 발생해버리고 마는 것...

(en-US인 분들은 전혀 체감이 안될테고...)

 

즉석 바로가기로 키보드를 제거할 수 있는 방법도 마련해뒀지만,

저처럼 근본 원인을 찾는 분들도 계셔서 연구 상황을 올립니다.

 

 

 

이제 아래의 실험단계를 진행했습니다.

1. 가상 머신으로 Windows 10을 설치한다.

2. 설치시 초반 단계에서 키보드 레이아웃 설정 직전에 그 상태를 본뜬다.

3. US 키보드를 설정하지 않은채 진행하고, 레지스트리 전체 값(1)을 내보낸 후, 가상머신 밖으로 보존해둔다.

4. 재부팅 후, 레지스트리 전체 값(2)을 내보낸 후, 가상머신 밖으로 보존해둔다.

5. 언어 설정에서 직접 US 키보드를 추가하고, 레지스트리 전체 값(3)을 내보낸 후, 가상머신 밖으로 보존해둔다.

6. 재부팅 후, 레지스트리 전체 값(4)을 내보낸 후, 가상머신 밖으로 보존해둔다.

7. 직접 US 키보드를 제거하고, 레지스트리 전체 값(5)을 내보낸 후, 가상머신 밖으로 보존해둔다.

8. 재부팅 후, 레지스트리 전체 값(6)을 내보낸 후, 가상머신 밖으로 보존해둔다.

9. 2에서 본뜬 단계로 돌아간다.

10. US 키보드를 두번째 레이아웃으로 설정하고, 레지스트리 전체 값(7)을 내보낸 후, 가상머신 밖으로 보존해둔다.

11. 재부팅 후, 레지스트리 전체 값(8)을 내보낸 후, 가상머신 밖으로 보존해둔다.

12. 직접 US 키보드를 제거하고, 레지스트리 전체 값(9)을 내보낸 후, 가상머신 밖으로 보존해둔다.

13. 재부팅 후, 레지스트리 전체 값(10)을 내보낸 후, 가상머신 밖으로 보존해둔다.

 

이 10개의 레지스트리 전체 값을 비교해본다.

(비교는 WinMerge로 진행)

(1)완전 말끔한 단계

(2)완전 말끔한 단계 + 재부팅

(3)직접 추가한 단계

(4)직접 추가한 단계 + 재부팅

(5)직접 추가했지만, 직접 제거한 단계

(6)직접 추가했지만, 직접 제거한 단계 + 재부팅

(7)초반에 설정을 해둔 단계

(8)초반에 설정을 해둔 단계 + 재부팅

(9)초반에 설정했지만, 직접 제거한 단계

(10)초반에 설정했지만, 직접 제거한 단계 + 재부팅

 

(1-2)로 재부팅시 뭔가 fix하는게 있는지 확인

(3-4)로 재부팅시 뭔가 fix하는게 있는지 확인

(5-6)로 재부팅시 뭔가 fix하는게 있는지 확인

(7-8)로 재부팅시 뭔가 fix하는게 있는지 확인

(9-10)로 재부팅시 뭔가 fix하는게 있는지 확인

 

(2-4)로 직접 추가했을 때 무엇들이 바뀌는지 확인

(4-6)로 직접 제거했을 때 무엇들이 바뀌는지 확인

(2-6)로 말끔할 때와 직접 추가 후 제거했을 때 깔끔하게 제거되는지, 남는게 있는지 확인

 

(8-10)로 첫 설정 후 직접 제거했을 때 무엇들이 바뀌는지 확인

 

(2-8)로 첫 설정시와 말끔할 때의 차이를 확인

(4-8)로 첫 설정시와 직접 추가했을 때의 차이를 확인

(6-10)로 첫 설정 후 제거와, 직접 추가 후 제거의 차이를 확인

 

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SystemProtectedUserData\*\AnyoneRead\LanguageProfile]

에서,

"Profile"의 값에 en-US 및 몇몇 문자열이 끼어들어감.

조심스럽게 없던 상태처럼 SYSTEM 권한으로 수정했으나, 2의 현상은 막지 못함.

(위에서 찌꺼기 관련하여 따로 기술함)

 

[HKEY_CURRENT_USER\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000409]

혹은 전체로 보면

[HKEY_USERS\*\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000409]

이 생겨남.

통째로 지워도, en-US를 추가했다가 지울 때마다 생겨져있음.

(추가할 때 생겨나고, 지울 때 지워지지 않음)

 

그 외 생기는 값들은 지울 때 착실히 지워졌음.

 

 

제가 내리는 결론은,

2의 현상을 막을 근본적인 해결책은 없고(찌꺼기 값으로 인한 것이 아님),

그냥 해당 프로그램이 어떻게 입력기기를 훑는지는 몰라도

개발자가 그 방식을 바꾸지 않는 한 피할 수 없는 것으로 생각됨.

(그냥 단발성 제거 바로가기를 애용해야할 듯...)

 

 

 

혹시 연구를 더 해보실 분들을 위해 파일을 공유합니다.

1~10.reg은 위에서 설명한 상태의 레지스트리 내보내기 전체값들이고,

01.reg는 말끔한 상태에서 언어 추가 직전

02.reg는 말끔한 상태에서 언어 추가시 모든 항목 선택(언어팩 포함)하여 설치한 상태

03.reg는 말끔한 상태에서 언어 추가시 최소한의 항목만으로 설치한 상태

입니다.

Registry.7z.001
10.00MB
Registry.7z.002
10.00MB
Registry.7z.003
10.00MB
Registry.7z.004
10.00MB
Registry.7z.005
10.00MB
Registry.7z.006
10.00MB
Registry.7z.007
10.00MB
Registry.7z.008
10.00MB
Registry.7z.009
10.00MB
Registry.7z.010
7.62MB

확장자를 txt로 바꾸셔서 사용하시는걸 추천.

(괜히 실행돼서 레지스트리에 값을 쓰지 않도록)

 

 

'Programs > help' 카테고리의 다른 글

한/영 누르면 Alt 문제 해결  (1) 2020.02.29
단발성 US키보드 제거  (20) 2019.12.12
자동실행 - 이벤트 뷰어, 작업 스케줄러  (0) 2019.05.05
PsExec - 시스템 권한 실행  (2) 2019.05.05
네이버, 카카오 API 키 발급  (3) 2019.04.19
Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→