아니?! 리눅스를 굳이 따로 안 써도 된다구요? window WSL2 Linux GUI 셋업하기!

Xonic·2021년 9월 17일
3

WSL2 생활

목록 보기
3/3
post-thumbnail

WSL2란?

WSL 2는 Linux용 Windows 하위 시스템 아키텍처의 새로운 버전으로, Linux용 Windows 하위 시스템이 Windows에서 ELF64 Linux 이진 파일을 실행할 수 있게 해줍니다. WSL 2의 주 목표는 파일 시스템 성능을 높이고 전체 시스템 호출 호환성 을 추가하는 것입니다.

이 새 아키텍처는 이러한 Linux 이진 파일이 Windows 및 컴퓨터의 하드웨어와 상호 작용하는 방식을 변경하되, WSL 1(현재 널리 사용 가능한 버전)과 동일한 사용자 환경을 제공합니다.

개별 Linux 배포는 WSL 1 또는 WSL 2 아키텍처를 사용하여 실행할 수 있습니다. 언제든지 각 배포를 업그레이드하거나 다운그레이드할 수 있으며 WSL 1 및 WSL 2 배포를 함께 실행할 수 있습니다. WSL 2는 실제 Linux 커널을 실행하는 이점을 제공하는 완전히 새로운 아키텍처를 사용합니다.

쉽게 말해서, 윈도우에서 리눅스를 사용하기 위한 도구라 보면 됩니다.
특히 흔히 아는 dockerlinux 기반으로 동작하기 때문에, WSL이 없었다면 vm ware 등을 사용하여 리눅스를 설치했어야 했을 것입니다.

WSL 설치 : https://docs.microsoft.com/ko-kr/windows/wsl/install-win10
노마드 코더 윈도우 셋업 링크 : https://nomadcoders.co/windows-setup-for-developers

WSL2를 사용하게 된 계기

  1. 처음에 docker를 사용하려고 알아보니, WSL이 필요하다고 해서 설치하게 되었습니다.

  2. 하지만 /mnt/c/~~ 경로에서 리눅스 커널로 작업을 하게 되면, 너무너무너무 느렸습니다.

  3. 처음엔 원래 이렇게 느린가? 하고 사용하다, gradlew build가 30분이 걸려 왜 그런지 찾아보게 되었습니다.

    The Windows Subsystem for Linux must translate various Linux file system operations into NT kernel operations. WSL must provide a place where Linux system files can exist, with all the functionality required for that including Linux permissions, symbolic links and other special files such as FIFOs; it must provide access to the Windows volumes on your system; and it must provide special file systems such as ProcFs.

    WSL provides access to Windows files by emulating full Linux behavior for the internal Linux file system with VolFs, and by providing full access to Windows drives and files through DrvFs. As of this writing, DrvFs enables some of the functionality of Linux file systems, such as case sensitivity and symbolic links, while still supporting interoperability with Windows.
    해당 정보 링크 : https://docs.microsoft.com/ko-kr/archive/blogs/wsl/wsl-file-system-support


뭔 말인진 잘 모르겠네요..

첫번째 시도

우선 윈도우에 있는 프로젝트 디렉토리를 \\wsl$\ 하위의 $HOME/username 으로 mv 하였으며,
GIT client GUI (FORK), IDE (IntelliJ IDEA) 도 최근 버전을 설치하면 WSL2를 지원한다는 정보를 입수하고 최근 버전을 설치하였습니다.
특히 Jetbrains은 유저들의 많은 불만 사항을 반영하여 올해부터 IntelliJ에서 WSL을 지원한 것으로 알고 있습니다.
(이미 visual studio code는 remote wsl을 지원함)

fork WSL 관련 정보
IntelliJ 유저들의 불만

  • 이 시도 뒤에 WSL 커널에서 작업시 File I/O (gradlew build, npm i, npm build 등 모든 명령어가 빠른 속도의 I/O를 보입니다.
  • IntelliJ에서 Android plugin을 비활성화 해줘야합니다. (이건 뒤에 두번째 시도에서도 마찬가지)

그런데.....


  • IntelliJRun이 어떻게 동작하는지 자세히는 모르지만, SpringBootApplication runPropertySource의 주입이 제대로 되지 않았습니다..
  • QueryDSL 사용 후 test run에 대해서 Q class 가 인식이 안되어
    build and run using & Run test usinggradle -> IntelliJ IDEA로 변경하니 test run은 제대로 동작하였습니다.
  • 하지만 파일 classpathIntelliJ에서 제대로 작동하지 않았습니다.
  • 또한 IntelliJ에서 file indexing 과정이 너무 느렸고 CPU 리소스도 많이 차지하는 것 같았습니다.
  • 그래서 WSL2 내에서 IntelliJ를 실행하려고 합니다.

두번째 시도

  • WSL 내에서 IDE 실행 필요성을 느낌.
  • 설치 과정이 스크린샷과 함께 포함 되어있으니 관심 있으신 분들은 세팅까지 완료하시면 되겠습니다.
  • shortcut(바로가기)까지 진행할 예정이니 끝까지 정독해주세요!

2020년 중순, WSL2의 등장으로 한 마이크로소프트 개발자분은 Linux GUI를 Window에서 실행하는 방법을 포스팅했습니다.

저는 그 중 첫번째 옵션을 진행할 계획입니다. (X 서버를 이용하여 IntelliJ를 shorcut으로 실행하는 것까지 기술)

X 서버(디스플레이 관리자) 설치

  1. 일단 X서버를 설치합니다.
    https://sourceforge.net/projects/vcxsrv/postdownload




반드시 Disable access control을 체크합니다.

Save Configuration 파일 저장 후 키보드로 window + R을 누릅니다

shell:startup을 입력 후 엔터 -> configuration 파일을 복사 붙여넣기 합니다.

  1. bash.exe 를 열고 (cmd에서 %WINDIR%\System32\bash.exe 엔터 치시면 리눅스 커널을 사용할 수 있습니다.)
vi /etc/bash.bashrc
  1. 맨 마지막 부분에 해당 줄을 입력합니다.
export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"

esc :wq로 나옵니다. (혹시 readonly이면 sudo vi /etc/bash.bashrc 입력해줍니다)

sh /etc/bash.bashrc

여기서 만약 zshrc를 사용하시는 분이라면

vi ~/.zshrc

에다가 export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"를 입력해야합니다.

FONT 설치 (D2 말고 다른거 하셔도 됩니다)

wget https://github.com/naver/d2codingfont/raw/master/D2Coding-Ver1.3.2-20180524.zip

unzip D2Coding-Ver1.3.2-20180524.zip

sudo cp D2Coding/D2Coding-Ver1.3.2-20180524.ttf /usr/local/share/fonts

명령어를 입력해줘 font 설치 합니다.

JDK 설치

혹시 jdk를 설치하지 않으셨다면,

sudo apt install openjdk-8-jdk
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1
sudo update-alternatives --config java
(추가한 number 입력)

한글을 입력하기 위해 fcitx를 설치해줍니다.

sudo apt install fcitx fcitx-hangul fonts-noto-cjk dbus-x11
im-config




fcitx만 선택하고 나머지는 그냥 Yes나 OK를 누르시면 됩니다.

vi ~/.bashrc 를 실행하시고
맨 마지막에

export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx

fcitx-autostart >/dev/null 2>&1

를 붙여넣고 :wq 로 나옵니다.

sh ~/.bashrc

Hangul 추가 및 Hotkey 설정

fcitx-config-gtk3


여기서 + 버튼을 클릭해 Hangul과 English를 추가해주시면 됩니다. (Korean 삭제 (-))

사진대로 만들어 주시면 됩니다.

Chromium-browser 설치

한글을 테스트 해보기 위해
Chromium을 설치해보고 실행해보겠습니다.

sudo add-apt-repository ppa:saiarcot895/chromium-dev
sudo apt-get update
sudo apt-get install chromium-browser

설치 후

chromium-browser

를 입력하게 되면 브라우저가 뜰 것이고,
한/영키를 눌렀을 때 정상적으로 한글이 입력된다면 성공입니다!

IntlliJ 설치

IntelliJ는 Jetbrains toolbox로 설치해보도록 하겠습니다.

cd
wget https://download-cdn.jetbrains.com/toolbox/jetbrains-toolbox-1.21.9712.tar.gz
tar xzvf jetbrains-toolbox-1.21.9712.tar.gz
cd jetbrains-toolbox-1.21.9712
./jetbrains-toolbox

.sh 파일 생성

window에서 바로 shortcut(바로가기)로 이용할 수 있도록 sh 파일을 생성해줍니다.

find ~/.local/share/JetBrains/Toolbox/apps -name idea.sh > ~/idea.sh

:wq

vi ~/toolbox.sh

#!/bin/bash
/home/xonic/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox

:wq
또는

find ~/.local/share/JetBrains/Toolbox/bin -name jetbrains-toolbox > ~/toolbox.sh

shortcut(바로가기) 만들기

IntelliJ IDEA
%WINDIR%\System32\bash.exe -i -c "sh /home/{username}/idea.sh"

Toolbox
%WINDIR%\System32\bash.exe -i -c "sh /home/{username}/toolbox.sh"

  1. 바탕화면에서 바로가기를 클릭해줍니다.
  2. 위에서 복사 붙여넣기 합니다.
  3. 아무거나 입력해주세요
  4. 생성 완료
  5. 더블클릭하면 정상적으로 작동됩니다.
  6. 저 같은 경우는 ico를 입혔습니다.

마치며

참고한 사이트

profile
공부 한 것을 공유하는 블로그입니다.

0개의 댓글