Windows 10 1809 다중 사용자 환경

BS가 iMac + Boot Camp 로 Windows 10 Pro 를 설치해서 사용 중입니다.
그리고 Windows 10 에 BS, 아내, 아이들 4개의 계정을 만들었습니다.
그런데 Windows 10 이라는 Desktop 용 OS의 기본 동작 중 하나가 불편을 줍니다.
최근 사용한 사용자를 자동으로 로그인 시키고, 이전에 실행 중이던 프로세스를 자동으로 실행하는 기능입니다.
PC를 혼자서 사용할 때에는 유용할 수 있는 기능이지만 다중 사용자 환경에서는 아래와 같은 상황이 벌어집니다.

  • PC를 켜서 BS가 사용 후 시스템 종료
  • PC를 켜서 아이가 사용
  • 아이가 PC를 종료하려고 하면 BS의 계정이 로그인 되어 있는데 종료하겠냐고 확인함
  • 아이는 아빠가 하던 무언가가 사라질까 걱정되어 PC를 종료하지 못함

유저가 아래의 설정에서 해당 기능을 On/Off 할 수 있습니다.

설정 > 계정 > 로그인 옵션 > “업데이트하거나 다시 시작한 후 내 로그인 정보를 사용하여 내 디바이스 설정을 완료합니다”

하지만 계정마다 설정해야 하는 문제가 있기 때문에 아래와 같은 방법으로 시스템 설정을 바꾸는 것이 좋습니다.

  • gpedit.msc 를 실행합니다.
  • 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows 로그온 옵션 항목으로 이동합니다.
  • “Sign-in last interactive user automatically after a system-initiated restart” 라는 항목의 구성을 “사용 안 함”으로 설정합니다.

레지스트리 값 경로

  • 키: HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System
  • 값 이름: DisableAutomaticRestartSignOn
  • 위 값이 존재하지 않을 때 : 구성하지 않음 (Not Configured) (기본값)
  • 위 값이 0 : 사용 (자동 로그인 됨)
  • 위 값이 1 : 사용 안 함 (자동 로그인 되지 않음)

Windows 10 의 다중 사용자 환경에서 잊지 않고 설정하세요.
참고자료: https://docs.microsoft.com/ko-kr/windows-server/identity/ad-ds/manage/component-updates/winlogon-automatic-restart-sign-on–arso-

자기 서명(self signed) SSL 인증서 만들기

openssl req -new -newkey rsa:2048 -days 36500 -nodes -x509 -keyout bslinux.key -out bslinux.crt

req 자기 서명 인증서 만들기
-new 새로 만들기
-newkey 키도 새로 만들기
rsa:2048 RSA 알고리즘의 길이를 2048로
-days 36500 유효 기간은 36500일 (100년?)
-nodes 개인키 파일 암호화 하지 않기
-x509 X.509 표준 형식으로 만들기
-keyout bslinux.key 개인키를 bslinux.key 로 저장
-out bslinux.crt 인증서를 bslinux.crt 로 저장

추가 옵션 하나… 인증서의 subject 설정
-subj ‘/C=KR/ST=Seoul/CN=www.example.com’

Windows 설치 목록에서 숨기는 방법

BS가 Boot Camp로 Windows를 사용하는데, 바보같은 Apple의 드라이버 설치가 엄청나게 설치 목록에 뜨게 되었습니다.
BS의 다른 가족 3명이 모두 컴맹인지라 혹여나 이것들을 삭제할까 걱정되어 숨기고 싶었습니다.
역시나… Windows는 방법이 있습니다.
레지스트리에서 설치 제거 항목을 찾아 갑니다.
보통 아래의 경로 중에 하나에 존재합니다.
HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall
HKLM/SOFTWARE/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall
숨기고자 하는 항목의 키를 찾습니다.
해당 키에 DWORD의 값을 하나 추가합니다. 이름은 SystemComponent
이름대로 값은 1로 설정합니다.
이제 프로그램 및 기능 또는 Windows 10의 앱 설정 화면에서 해당 항목이 보이지 않게 됩니다.

Ubuntu + 노트북 사용시 화면을 덮어도 절전모드 되지 않게 하기

BS가 사용하던 노트북의 해체하여 SSD는 외장 하드로 사용하고, Main 작업 PC는 아내의 iMac에 기생하고 있습니다.

노트북을 버리기에는 아깝고, 중고로 팔기에는 너무 오래 되었고 해서 Ubuntu를 설치하고 이것 저것 공부할 때에나 써보자 해서 Ubuntu를 설치했는데…
공간의 문제로 뚜껑을 덮어놔야 하는 상황입니다.

그런데 기본 Ubuntu의 동작은 역시나 뚜껑을 덮으면 절전 모드가 됩니다.

이를 방지하는 방법을 소개합니다.

  1. 터미널을 열고 /etc/systemd/logind.conf 파일을 엽니다. 당연히 root 권한으로(sudo 사용)
  2. 아래 두 설정을 입력합니다.
    HandleLidSwitch=ignore
    HandleLidSwitchDocked=ignore
  3. 저장하고 나서 아래 명령으로 서비스를 재시작 합니다.
    service systemd-logind restart
  4. 이제 뚜껑을 덮어도 절전 모드로 들어가지 않게 되었습니다.
  5. 해당 설정에 사용할 수 있는 옵션은 아래와 같습니다.
    poweroff
    hibernate
    suspend
    ignore

Boot Camp를 사용할 때 OS 선택해서 부팅하기

  1. Mac -> Windows
    맥 설정에서 시동 디스크 기능을 통해 Windows로 부팅할 수 있다.
  2. Windows -> Mac
    Windows의 알림 영역에 보이는 Boot Camp 아이콘을 통해서 Mac으로 부팅
  3. 최종 방법
    컴퓨터를 리붓하고 “띵”소리 나기 전부터 즉시 option 키를 계속 누르고 있으면 시동 파티션을 선택하는 화면이 나오는데 여기에서 선택https://support.apple.com/ko-kr/HT208123

맥용 키보드를 Windows 에서 사용하기 위한 키보드 배열 수정

어쩌다보니 iMac + Mojave + Bootcamp + Windows 10 1809 를 사용하게 되었습니다.
맥용 키보드와 Windows용 키보드의 배열이 달라서 조금 불편함이 있습니다.
참고로 BS는 NumPad가 있는 애플 정품 키보드를 사용 중입니다.

일단 BS는 취미로 각종 개발툴을 사용하는데 여기에서 자주 쓰이는 단축키인 Shift + Space 를 버릴 수 없습니다.
따라서 Windows 의 101A 타입으로 키배열을 설정했습니다.
101A 타입은 우측 Alt 키를 한/영 전환키로, 우측 Ctrl 키를 한자키로 사용합니다.

macOS는 Command 키를 자주 사용하고 기본 한/영 전환이 CapsLock 또는 Shift + Space에 바인딩 되어 있습니다.
Windows는 Ctrl, Alt 키를 자주 사용합니다. 그리고 101A에서 우측 Alt가 한영 전환입니다.
사용해보면 Left Alt와 Right Alt(한영)을 사용할 때 엄지 손가락으로 누르기가 굉장히 불편합니다.

그리고 Print Screen, Scroll Lock, Pause, Insert, NumLock 은 보이지도 않습니다.

우선 Windows를 Bootcamp로 설치하고 나서 드라이버 설치가 끝난 상태면
Bootcamp를 통해서 F1 ~ F12 의 키를 멀티미디어 키가 아닌 Function키로 설정할 수 있습니다.

이렇게 하고 나면

F14 (Home 키 위에 위치) -> Print Screen
F15 (PageUp 키 위에 위치) -> Scroll Lock
F16 (NumPad의 Clear 키 위에 위치) -> Pause
fn (Home 키 왼쪽에 위치) + return -> Insert

이렇게 해서 사용할 수 있게 됩니다. 여전히 Windows용 키의 Application 키(마우스 우클릭 했을 때 메뉴가 나오게 하는 키)가 없습니다.

BS는 여기에서 약간의 배열 변경을 추가하였습니다.

왼쪽 Command -> 왼쪽 Alt
왼쪽 Alt -> 왼쪽 Win
오른쪽 Command -> 한/영 (101A의 오른쪽 Alt)
오른쪽 Alt -> Application 키
F13 (fn 위에 위치) -> Insert 키

fn키는 별도의 스캔코드를 가지지 않는 하드웨어 키 조합용으로 사용할 수 없습니다. ㅜㅜ

이렇게 해서 최대한 Windows용 키보드 배열과 유사하게 수정해서 사용 중입니다.
마우스도 바꿨습니다. 원버튼뿐인 맥용 매직 마우스는 봉인하고 유사?한 디자인의 APOINT M302 화이트로…

이제 좀 Windows 답게 사용할 수 있네요.

… 이제 본론 입니다.

키보드 배열을 바꾸기 위한 레지스트리(Registry) 편집
(잘 모르면 시도하지 마세요. 까닥 잘못하면 키보드 입력이 안되어 문제가 될 수 있습니다.)

키 위치: HKLM/SYSTEM/CurrentControlSet/Control/Keyboard Layout
값 이름: Scancode Map
값 타입: 이진값(Binary)

입력은 보통 8바이트 단위로 줄바꿈이 되는데 설명을 위해 4바이트 단위로 잘랐습니다.

00 00 00 00 처음 8 바이트는 무조건 0
00 00 00 00
06 00 00 00 5개의 배열을 지정하기 위해 6 (5 + 1) 입력
38 00 5b e0 E0_5B(Left Command) -> 00_38(Left Alt)
5b e0 38 00 00_38(Left Option) -> E0_5B(Left Win)
38 e0 5c e0 E0_5C(Left Command) -> E0_38(Right Alt, 한영)
5d e0 38 e0 E0_38(Right Option) -> E0_5D(Application)
52 e0 64 00 00_64(F13) -> E0_52(Insert)
00 00 00 00 마지막 4 바이트는 무조건 0

원래대로 돌리고 싶으면 해당 값을 지우면 됩니다.
변경 후에는 Reboot이 필요합니다.

만약 다중 사용자 환경에서 본인만 바꿔서 사용하고 싶으면 키보드 후킹을 구현하거나, AutoHotkey와 같은 유틸리티를 사용하는 것을 권장합니다.

그리고 마지막 보너스
키보드의 스캔 코드를 구하는 간단한 소스입니다.
핵심은 “RegisterRawInputDevices()으로 등록하고, GetRawInputData() 으로 가져온다” 입니다.
.NetFramework 4를 지정해서 빌드한 Release 파일도 포함되어 있습니다.

iMac + Bootcamp 로 윈도우 사용시 키보드 팁

Pause/Break
fn + ESC
예) 시스템 정보 창 띄우기: Command + fn + ESC -> Win + Pause

Insert
fn + return

fn + L-Shift + F11
Print Screen

[애플 글] https://support.apple.com/en-us/HT202676
[MS의 키보드 레이아웃 편집기] https://www.microsoft.com/en-us/download/details.aspx?id=22339

글을 적고 나서 일반적인 윈도우용 키보드 배열로 바꾸려고 키보드 스캔코드를 찾는 프로그램을 만들어 확인한 결과 아래와 같은 것을 발견? 하였다.
(환경은 macOS Mojave 10.14 + Bootcamp + Windows 10 1809 + NumPad 있는 애플 정품 키보드)

F14 -> Print Screen
F15 -> Scroll Lock
F16 -> Pause/Break

조만간 정리해서 애플 정품 키보드를 Bootcamp로 사용할 때, 스캔코드를 변경해서 배열을 변경하는 포스팅을…

프로그래밍 폰트 (코딩 폰트)

아직까지는 프로그램 코드 작성시 많은 사람들이 monospace 폰트(고정폭 폰트)를 사용한다.
이유는 다른 프로그래머가 다른 IDE로 소스를 보더라도 고정 폰트이면 비슷한 모습을 볼 수 있기 때문이다.
고정폭이 아니면 들여쓰기나 코드의 길이등이 일치하지 않아 코드를 보는데 어려움이 있을 수 있다.
게다가 문자가 헷갈리는 경우 코드 가독성이 확 떨어진다.

1lI|ㅣ!
oO0ㅇ
:;
[](){}<>
SsCcVvPp

위 글자가 모두 달리 보이고 확실히 구분되지 않으면
대소문자나 기호에 민감한 코딩에서 굉장히 불편해진다.
그래서 코딩을 하는 사람들은 각자 선호하는 코딩 폰트들이 존재한다.

이런 코딩을 위한 폰트 몇 개를 소개한다.

[D2Coding]

네이버에서 만든 한글이 지원되는 코딩용 폰트
나눔바른고딕 기반
[공식 페이지: https://github.com/naver/d2codingfont]
[소개글: https://bspfp.pe.kr/archives/1520]

[나눔고딕코딩]

네이버에서 만든 한글이 지원되는 코딩용 폰트
나눔고딕 기반
구글 폰트에 포함되었다. 하지만 개인적으로는 D2Coding이 더 나은 것 같다.
[공식 페이지: https://github.com/naver/nanumfont/blob/master/README.md]
D2Coding 과 비교 이미지

Consolas

MS에서 Windows Vista, Office 2007, Visual Studio 2010 에서 채택한 고정폭 폰트이다.
매우 훌륭하지만… 한글이 없다. 그리고 자유롭지 못하다. 즉, 라이센스가 필요하다.
ClearType Font이다.
[다운로드: https://www.microsoft.com/en-us/download/details.aspx?id=17879]
[Google Fonts] 에서 free 한 대체 버전인 [Inconsolata]가 있다.
Google에서 “Consolas 한글”과 같이 검색하면 한글관련 커스텀 작업 결과를 공유한 사람들의 자료가 나온다.

Vera Sans Mono

Bitstream 의 코딩용 폰트이다. Latin 알파벳만 지원한다. 즉, 한글이 없다.
물론 Google에서 “Vera Sans Mono 한글”과 같이 검색하면 한글 관련 자료가 나오긴 한다.
[다운로드 페이지: https://www.gnome.org/fonts/]

Deja Vu Sans Mono

Vera 를 기반으로 한 변형 폰트이다.
역시나 한글은 지원하지 않는다.
[공식 페이지: https://dejavu-fonts.github.io/]

Linux 의 Run Level

Run Level 은 Unix System V 스타일의 초기화를 구현하는 OS의 작동 모드를 말한다.

작동 모드는 각 OS 마다 조금씩 차이가 있지만 대체로

  • 0(Shutdown)
    OS를 종료
  • 1(Single User Mode)
    네트워크와 대다수의 대몬을 실행하지 않는 단일 사용자 모드
    마치 Windows의 안전모드 명령프롬프트와 유사한 형태
  • 6(Reboot)
    OS를 재시작

그리고 Linux의 일반적인 모드는 위의 모드에 추가로 아래와 같은 것들이 있다.

  • 2(Multi User Mode)
    네트워크 안되는 다중 사용자 모드
  • 3(Multi User Mode with Networking)
    CLI 기반의 대부분의 동작을 모두 수행하는 다중 사용자 모드
    보통 서버 환경에서 사용하는 모드
  • 5(with Display manager)
    Runlevel 3에다가 GUI를 위한 display manager를 추가한 모드
    보통 display manager는 X11 을 많이 사용한다.

[참고 자료: 위키의 설명: https://en.wikipedia.org/wiki/Runlevel]

현재 runlevel을 확인하는 방법은

runlevel
who -r

Ubuntu 홈 하위 디렉토리 이름을 원하는 언어로 변경

Ubuntu 를 한글로 설치하면 계정의 홈 디렉토리 하위 디렉토리 이름들이 “다운로드” 와 같이 표시되어
일부 Application 에서 인식을 하지 못하는 서러움을 겪는다.
이때 아래와 같이 하면 서럽지만 영문으로 사용할 수 있다.

echo 'en_US' > ~/.config/user-dirs.locale

그리고 xdg-user-dirs-update 나 xdg-user-dirs-gtk-update 으로 업데이트를…