• WSL2에서 usb-ipd를 이용해서 디바이스를 연결할 수 있었습니다만, 현재의 WSL2 기본 커널에선 웹캠을 지원하지 않습니다. 따라서 웹캠을 WSL2에서 사용하기 위해선 커널을 재빌드해줘야 합니다.

    Ubuntu를 실행하고, 먼저 빌드에 필요한 패키지를 설치해줍니다.

    $ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev

    다음으로, 커널 소스를 가져옵니다. 현재 릴리즈된 최신 버전은 5.15.90.1입니다. 관련된 Repository는 https://github.com/microsoft/WSL2-Linux-Kernel 에서 확인할 수 있습니다.

    $ mkdir ~/tmp
    $ cd ~/tmp
    $ wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.90.1.tar.gz
    $ tar zxf linux-msft-wsl-5.15.90.1.tar.gz
    $ cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1
    

    기존 커널 옵션을 가져와서 복사해놓습니다.

    $ cp /proc/config.gz
    $ gunzip config.gz
    $ mv config .config

    커널 빌드 옵션을 조정하기 위해서 다음의 명령어를 입력해줍니다.

    $ make menuconfig

    카메라에 관련한 몇가지 옵션을 조정해줍니다. 옵션은 Space Bar를 누르면 조정가능합니다. 하위 메뉴를 찾아서 다음과 같이 설정해줍니다.

    Device Driver --> <*>  Multimedia Support
    Multimedia Support --> [*] Filter media drivers
    Multimedia Support --> Media device types --> [*] Cameras and video grabbers
    Multimedia Support --> Video4Linux options -> [*] V4L2 sub-device userspace API
    Multimedia Support --> Media drivers --> [*] Media USB Adapters
    Media USB Adapters --> <*> USB Video Class (UVC)
    Media USB Adapters --> <*> GSPCA based webcams

    설정이 완료되면, 저장한 후 다시 터미널로 나와 다음과 같이 입력하여 빌드를 진행해줍니다.

    $ make -j8

    빌드가 완료되었습니다.

      GZIP    arch/x86/boot/compressed/vmlinux.bin.gz
      MKPIGGY arch/x86/boot/compressed/piggy.S
      AS      arch/x86/boot/compressed/piggy.o
      LD      arch/x86/boot/compressed/vmlinux
      ZOFFSET arch/x86/boot/zoffset.h
      OBJCOPY arch/x86/boot/vmlinux.bin
      AS      arch/x86/boot/header.o
      LD      arch/x86/boot/setup.elf
      OBJCOPY arch/x86/boot/setup.bin
      BUILD   arch/x86/boot/bzImage
    Kernel: arch/x86/boot/bzImage is ready  (#1)

    다음으로 모듈을 빌드하고 설치해줍니다.

    $ sudo make modules_install
    
    arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
      DEPMOD  /lib/modules/5.15.90.1-microsoft-standard-WSL2

    또, 빌드된 커널을 설치해줍니다.

    $ sudo make install
    
    arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
    sh ./arch/x86/boot/install.sh 5.15.90.1-microsoft-standard-WSL2 \
            arch/x86/boot/bzImage System.map "/boot"
    run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 5.15.90.1-microsoft-standard-WSL2 /boot/vmlinuz-5.15.90.1-microsoft-standard-WSL2

    또, 빌드된 커널 이미지 vmlinux를 C:\의 임의의 디렉토리로 복사해줍니다.

    $ sudo cp -rf vmlinux /mnt/c/Kernels

    이제 Ubuntu에서의 작업은 모두 완료되었습니다.


    먼저 WSL2를 종료합니다.

    > wsl2 --shutdown

    윈도우에서 홈디렉토리의 .wslconfig 파일을 다음과 같이 수정해줍니다.

    [WSL2]
    networkingMode = bridged
    vmSwitch = wsl2-external
    kernel = C:\\Kernels\\vmlinux

    이제 다시 Ubuntu를 실행합니다.


    커널이 잘 로딩되었는지 빌드 번호 확인

    $ uname -a
    Linux DESKTOP-HFMFSCL 5.15.90.1-microsoft-standard-WSL2 #1 SMP Tue Feb 14 09:51:42 KST 2023 x86_64 x86_64 x86_64 GNU/Linux

    이제 웹캠이 잘 연결되는지 확인해봅니다.

    먼저 윈도우의 커맨드 창에서 usbipd를 이용해 웹캠을 attach 해줍니다.

    > usbipd wsl list 
    BUSID  VID:PID    DEVICE                                                        STATE   
    2-1    27c6:533c  Goodix fingerprint                                            Not attached  
    2-2    1a86:7523  USB-SERIAL CH340 (COM6)                                       Not attached
    2-5    0c45:6a0c  Integrated Webcam                                             Not attached 
    2-14   8087:0026  Intel(R) Wireless Bluetooth(R)                                Not attached 
    6-2    0bda:8153  Realtek USB GbE Family Controller                             Not attached 
    7-1    05ac:024f  USB Input Device                                              Not attached 
    7-3    046d:c539  USB Input Device                                              Not attached 
    7-4    0bda:49a7  Realtek USB2.0 Audio, USB Input Device                        Not attached
    
    > usbipd wsl attach -b 2-5

    Ubuntu를 실행하고 커널 메시지를 확인해봅니다.

    $ sudo dmesg
    ...
    [  120.428941] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
    [  120.430636] vhci_hcd vhci_hcd.0: devid(131077) speed(3) speed_str(high-speed)
    [  120.431905] vhci_hcd vhci_hcd.0: Device attached
    [  120.781071] usb 1-1: new high-speed USB device number 2 using vhci_hcd
    [  120.931358] usb 1-1: SetAddress Request (2) to port 0
    [  120.985548] usb 1-1: New USB device found, idVendor=0c45, idProduct=6a0c, bcdDevice= 1.30
    [  120.986274] usb 1-1: New USB device strings: Mfr=2, Product=1, SerialNumber=0
    [  120.986647] usb 1-1: Product: Integrated_Webcam_HD
    [  120.986898] usb 1-1: Manufacturer: CKFJH67N3010300037T0
    [  121.004725] usb 1-1: Found UVC 1.00 device Integrated_Webcam_HD (0c45:6a0c)
    [  121.023621] input: Integrated_Webcam_HD: Integrate as /devices/platform/vhci_hcd.0/usb1/1-1/1-1:1.0/input/input0
    [  121.026970] usb 1-1: Found UVC 1.00 device Integrated_Webcam_HD (0c45:6a0c)
    [  121.038030] input: Integrated_Webcam_HD: Integrate as /devices/platform/vhci_hcd.0/usb1/1-1/1-1:1.2/input/input1

    /dev 디렉토리에 video0가 생성되었는지 확인합니다.

    $ ll /dev/video*
    crw------- 1 root root 81, 0 Feb 14 10:31 /dev/video0
    crw------- 1 root root 81, 1 Feb 14 10:31 /dev/video1
    crw------- 1 root root 81, 2 Feb 14 10:31 /dev/video2
    crw------- 1 root root 81, 3 Feb 14 10:31 /dev/video3

    v4l2-ctrl 명령어로 디바이스 확인

    $ sudo v4l2-ctl --list-devices
    Integrated_Webcam_HD: Integrate (usb-vhci_hcd.0-1):
            /dev/video0
            /dev/video1
            /dev/video2
            /dev/video3
            /dev/media0
            /dev/media1

    영상은… 제 경우엔 검은색 화면만 나오고 있는데, 이 부분은 다시 확인해봐야겠습니다. 또 sudo 권한으로만 접근이 가능한 점도 뭔가 설정이 더 필요한듯 합니다.

  • 참고링크: https://github.com/dorssel/usbipd-win, https://learn.microsoft.com/ko-kr/windows/wsl/connect-usb

    WSL2는 윈도우에서 실행되는 일종의 가상머신입니다. 실제 윈도우에 연결된 USB 디바이스 (아두이노보드, 웹캠 등)를 WSL2에서 사용하기 위해서는 USB/IP 오픈소스 프로젝트에서 제공하는 usb-ipd를 사용하면 됩니다.

    [v] 윈도우에서 usbipd 설치

    먼저 설치를 위해서, 커맨드 창을 관리자 권한으로 실행합니다.

    > winget install usbipd  
    Microsoft Windows [Version 10.0.22621.1194] 
    (c) Microsoft Corporation. All rights reserved.        
                                                                                                                                                                                             C:\Windows\System32> winget install usbipd  
    The `msstore` source requires that you view the following agreements before using.
    Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
    The source requires the current machine's 2-letter geographic region to be sent to the backend
    service to function properly (ex. "US").
    Do you agree to all the source agreements terms?
    [Y] Yes  [N] No: y
    
    Found usbipd-win [dorssel.usbipd-win] Version 2.4.1 
    This application is licensed to you by its owner. 
    Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
    Downloading https://github.com/dorssel/usbipd-win/releases/download/v2.4.1/usbipd-win_2.4.1.msi
    ██████████████████████████████  9.99 MB / 9.99 MB 
    Successfully verified installer hash 
    Starting package install...  
    Successfully installed  

    winget은 윈도우에서 사용할 수 있는 패키지 매니저입니다. 위와 같이 명령을 입력하고 나면 자동으로 설치가 진행됩니다.

    [v] Linux 머신에서 USBIP 도구 및 하드웨어 데이터베이스 설치

    WSL2를 실행하고, Ubuntu 머신에서 다음과 같이 입력하여 usbipd 클라이언트 패키지를 설치합니다.

    $ sudo apt install linux-tools-virtual hwdata
    $ sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

    이제 설치가 완료되었습니다. 본격적으로 사용해보도록 합니다.


    예시로, 노트북에 연결되어 있는 USB Serial 컨버터를 연결해봅니다.

    먼저 디바이스를 WSL2 머신에 attach 해줘야 합니다. 커맨드창을 관리자 권한을 실행한 다음, 다음과 같이 입력하여 usb 디바이스를 확인해봅니다.

    >usbipd wsl list 
    BUSID  VID:PID    DEVICE                                                        STATE  
    2-1    27c6:533c  Goodix fingerprint                                            Not attached  
    2-2    1a86:7523  USB-SERIAL CH340 (COM6)                                       Not attached  
    2-5    0c45:6a0c  Integrated Webcam                                             Not attached  
    2-14   8087:0026  Intel(R) Wireless Bluetooth(R)                                Not attached  
    6-2    0bda:8153  Realtek USB GbE Family Controller                             Not attached  
    7-1    05ac:024f  USB Input Device                                              Not attached  
    7-3    046d:c539  USB Input Device                                              Not attached  
    7-4    0bda:49a7  Realtek USB2.0 Audio, USB Input Device                        Not attached 

    제 노트북에서 USB Serial 컨버터가 버스 아이디 2-2에 연결되어 있습니다. 현재는 Not attached 상태로 되어 있습니다. 이제 이 디바이스를 WSL2에 연결해봅니다.

    > usbipd wsl attach -b 2-2
    > usbipd wsl list
    BUSID  VID:PID    DEVICE                                                        STATE 
    2-1    27c6:533c  Goodix fingerprint                                            Not attached 
    2-2    1a86:7523  USB-SERIAL CH340 (COM6)                                       Attached - Ubuntu 
    2-5    0c45:6a0c  Integrated Webcam                                             Not attached 
    2-14   8087:0026  Intel(R) Wireless Bluetooth(R)                                Not attached
    6-2    0bda:8153  Realtek USB GbE Family Controller                             Not attached 
    7-1    05ac:024f  USB Input Device                                              Not attached 
    7-3    046d:c539  USB Input Device                                              Not attached 
    7-4    0bda:49a7  Realtek USB2.0 Audio, USB Input Device                        Not attached 

    Attach한 이후 디바이스 리스트를 확인해보면 다음과 같이 Ubuntu에 Attached 된 상태로 확인이 됩니다.

    이제 Ubuntu 머신으로 이동해서, dmesg로 연결이 되었는지 확인해봅니다.

    $ sudo dmesg
    ...
    
    [  827.577688] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
    [  827.578223] vhci_hcd vhci_hcd.0: devid(131074) speed(2) speed_str(full-speed)
    [  827.578767] vhci_hcd vhci_hcd.0: Device attached
    [  827.850429] vhci_hcd: vhci_device speed not set
    [  827.920445] usb 1-1: new high-speed USB device number 3 using vhci_hcd
    [  828.000576] vhci_hcd: vhci_device speed not set
    [  828.150453] vhci_hcd: vhci_device speed not set
    [  828.220264] usb 1-1: new full-speed USB device number 4 using vhci_hcd
    [  828.300294] vhci_hcd: vhci_device speed not set
    [  828.370303] usb 1-1: SetAddress Request (4) to port 0
    [  828.410565] usb 1-1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
    [  828.412926] usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
    [  828.413663] usb 1-1: Product: USB2.0-Serial
    [  828.415868] ch341 1-1:1.0: ch341-uart converter detected
    [  828.419568] usb 1-1: ch341-uart converter now attached to ttyUSB0

    실제로 디바이스가 Ubuntu에 연결된 것을 확인할 수 있습니다.

  • 이전 블로그에서 정리했던 내용인데, 윈도우를 포맷한 후 새로 테스트 해본 결과 정리. 별다른 차이 없이 잘됨.


    덧#1: 현재 원인은 잘 모르겠는데, 아래와 같이 브릿지로 설정을 해놓으면, 인터넷 업로드 속도 및 노션 등 클라우드 서비스의 속도가 미친듯이 느려지는 상황이 발생합니다. 구글링 해보니, 같은 증상을 호소하는 사람이 다수있네요. 버그인듯한데… 방법을 찾아봐야겠습니다.


    WLS2의 서브 머신들의 네트워크는 내부 프라이빗망을 사용한다. 외부 대역과는 분리되어 있다는 의미로, 예를 들어 Ubuntu를 설치하고 ifconfig를 실행해보면,

    $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.21.50.26  netmask 255.255.240.0  broadcast 172.21.63.255
            inet6 fe80::215:5dff:fec8:7eef  prefixlen 64  scopeid 0x20<link>
            ether 00:15:5d:c8:7e:ef  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 7  bytes 586 (586.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    와 같이 172.21.50.xx 대역의 아이피를 자동으로 할당받는다.

    사용 목적에 따라 현재 사용하는 윈도우 머신의 네트워크를 브릿지하여 외부에서도 접속이 가능할 수 있게끔 할 필요가 있는데, 이를 사용하려면 WSL2의 Bridge 기능을 사용하면 된다.

    먼저 윈도우 추가 기능 중 Hyper-V 기능을 활성화한다.

    설치를 완료하고, 재부팅.

    Hyper-V Manager를 실행한다.

    메뉴 > Action > Virtual Switch Manager를 실행한다.

    우측 Create virtual switch에서 External를 선택하고, Create Virtual Switch버튼을 누른다.

    이름을 적당히 입력하고 (여기선 wsl2-external), Connection type에서는 External network에서 외부망과 연결할 Network 카드를 선택한다. 현재 테스트 환경은 노트북이라 여기에선 노트북의 WiFi 카드를 선택함.

    네트워크 설정 과정에서 현재 연결 상태를 변경할 수 도 있다는 경고인데, 그냥 Yes를 눌러 진행한다.

    이제 Hyper-V Manager를 종료하고, 사용자 홈 디렉토리 (C:\User\<user-name>\)에 .wslconfig 파일을 생성하고 다음과 같이 입력한다.

    [WSL2]
    networkingMode = bridged
    vmSwitch = wsl2-external

    networkingMode를 bridged로 설정하고, vmSwitch에는 전 과정에서 생성한 Virtual Switch 이름을 입력한다.

    코맨드 창을 열고, wsl2를 완전히 종료한다.

    > C:\Windows\System32\wsl.exe --shutdown

    이제 wsl2의 서브 머신, 예를 들면 Ubuntu를 시작해서 ifconfig 명령어를 실행해보면,

    $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.237  netmask 255.255.255.0  broadcast 192.168.1.255
            ether 5c:bb:f6:9e:ee:fa  txqueuelen 1000  (Ethernet)
            RX packets 17  bytes 2506 (2.5 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 684 (684.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    와 같이 외부망의 IP를 할당받아 사용되는 것을 볼 수 있다.

    외부에서 접속도 가능하고, 외부로 나가는 트래픽도 문제가 없음.

  • 참고림크: https://docs.nvidia.com/cuda/wsl-user-guide/index.html

    WSL2로 설치한 Ubuntu에서 CUDA를 설치하면 GPU 가속에 관련한 개발을 진행 할 수 있다.

    물론 윈도우에서 NVIDIA 드라이버 설치가 완료되어 있어야 함. https://www.nvidia.com/Download/index.aspx. 설치방법은 위 링크를 참고. 권장된 방법대로 WSL-Ubuntu 패키지를 이용한 설치 방법을 사용한다. Ubuntu를 실행한 후 다음과 같이 입력한다.

    $ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
    $ sudo dpkg -i cuda-keyring_1.0-1_all.deb
    $ sudo apt-get -y install cuda

    설치가 완료되면, 확인.

    완료.

  • 참고링크: https://learn.microsoft.com/ko-kr/windows/wsl/install

    현재 개발환경: Windows 11 Pro 22H2

    설치를 진행하기 위해 커맨드 창을 관리자 권한으로 실행한다.

    > wsl --install

    자동으로 설치가 진행되고, 다음과 같이 Ubuntu 22.04까지 설치가 완료됨.

    > wsl --install                                                                                       Installing: Virtual Machine Platform                                                                                    Virtual Machine Platform has been installed.                                                                            Installing: Windows Subsystem for Linux                                                                                 Windows Subsystem for Linux has been installed.                                                                         Installing: Ubuntu                                                                                                      Ubuntu has been installed.                                                                                              The requested operation is successful. Changes will not be effective until the system is rebooted.                                                                                                                        

    재부팅 필요.

    시작메뉴에서 Ubuntu 확인 가능. 추가로 다른 버전의 Linux를 설치하고 싶다면, Microsoft Store를 통해서 설치 진행한다.

    처음 실행 시, 사용자 이름과 암호를 입력하고 나면 Ubuntu가 정상적으로 실행됨을 볼 수 있다.

    이제 기본 Ubuntu와 동일하게 사용 가능.

    기본적으로 wsl2로 설치가 진행된다고 함. (예전엔 wsl1으로 되었는데…) 확인은 다음과 같이 입력하면 됨.

    > wsl -l -v
      NAME      STATE           VERSION
    * Ubuntu    Running         2

    완료

  • ROS를 사용하여 개발을 하다보니, ROS의 버전 파편화 덕분(?)에 Ubuntu의 버전을 달리 사용해야 하는 경우가 발생합니다. 현재 ROS2의 최신 LTS 버전은 Humble로 Ubuntu 22.04에서 사용이 가능합니다. ROS1의 경우 최종 LTS 버전이 Noetic으로 Ubuntu 20.04에서 사용이 가능합니다. 따라서 이 두개의 버전을 사용하기 위해선 두 개의 Ubuntu 버전을 사용해야 합니다.

    도커를 사용하는 방법이 있으나, 개발 시에 불편한 점이 있기도 하고 사용자에게 교육 시 일반화 하기엔 무리가 좀 따릅니다. 또 외장 USB 혹은 SSD를 이용하는 방법도 있지만, 주렁주렁 매달고 다니기엔 좀 불편하죠.

    하나의 디스크에 루트 파티션만 분리하면, 여러가지 버전의 Ubuntu를 사용할 수 있습니다.

    먼저 가장 최신 버전의 Ubuntu 배포판을 설치합니다. 물론 윈도우와 멀티부팅하는 경우도 포함합니다.

    설치 과정에서 디스크 파티션을 설정하는 부분이 있는데, 이때 나중에 설치할 배포판의 루트 영역도 확보해둡니다. 예를 들자면 다음과 같이 구성합니다.

    /dev/sda1    /boot    EFI     2000MB
    /dev/sda2    /        ext4    200000MB
    /dev/sda3    None     ext4    200000MB
    /dev/sda4    swap     swap    32768MB

    장치번호는 사용자마 다를 수 있으니 감안하시고, 구성된 것을 보면, 루트 파티션(/)만 분리해 둔 것을 볼 수 있습니다. 이제 설치과정을 진행하여 정상적으로 완료하도록 합니다.

    다음으로,

    추가로 설치할 배포판 설치를 진행합니다. 이때는 기존의 설치방법이 아닌, Try Ubuntu 등 임시로 사용할 수 있는 모드로 부팅을 완료한 후, 터미널을 실행하여 다음과 같이 입력합니다.

    $ ubiquity -b

    위 명령은 설치 진행 시 부트로더 설치를 하지 않겠다는 의미입니다. 설치과정은 기존과 동일하고, 다만 파티션 설정 부분에서 기존에 확보해두었던 파티션을 루트 파티션으로 선택합니다. (위와 같은 구성의 경우 /dev/sda3)

    이제 전 과정에서 설치한 최신 배포판으로 부팅한 후,

    $ sudo update-grub2

    을 입력하면, 자동으로 grub에서 모든 파티션의 루트 파티션을 인식해서 부팅목록에 추가해 줍니다.

    Grub의 기본 설정이 별다른 입력이 없으면, 휙 그냥 지나가게 되어 있어, /etc/default/grub 파일을 열어 다음과 같이 수정해준다.

    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    GRUB_DEFAULT=0
    GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=10
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""

    다시,

    $ sudo update-grub2

    해주고, 재부팅하면 정상적으로 grub 창이 뜨고, 부팅할 곳을 선택할 수 있음.

  • 윈도우11로 판올림하여 사용하면서 불편한 부분이 바탕화면에서 오른쪽 버튼을 눌렀을 때, 기존 메뉴가 다 나타나는게 아니고 항상 “더 많은 옵션”을 눌러야만 보이는 점입니다.

    이를 비활성화 하기 위해선,

    CMD창을 관리자 권한으로 실행하고, 다음과 같이 입력합니다.

    > reg.exe add “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /f /ve

    그런 다음, explorer.exe를 강제 종료합니다.

    > taskkill /f /im explorer.exe

    다시 explorer.exe를 실행해 줍니다.

    > explorer.exe

    이제 확인해보면, 더 많은 옵션 메뉴가 사라지고 모든 메뉴가 잘 보이는 것을 확인할 수 있습니다.


    다시 이전으로 복구하려면,

    > reg.exe delete “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}” /f
    > taskkill /f /im explorer.exe
    > explorer
  • 아주 간만에 윈도우를 새로 설치해야 할 일이 생겼습니다. 듀얼부팅으로 사용하던 리눅스에서 USB 메모리를 지운다고 했던 것이 윈도우 파티션을 아주 깔끔하게 지워버리는 사고를 치는 바람에… 복구 USB 스틱을 만들고, 윈도우 설치를 진행하는 도중에 아무 생각없이 live 계정과 연결하도록 하였는데, 이게 자꾸 이상하게 꼬이는 현상을 보입니다.

    기존 User 홈 폴더에 Desktop / Documents / Downloads / Videos / Pictures 등이 생성되고 여기에 자료가 모아지는 형태였는데, 라이브 계정과 연동하면 기본으로 이 유저 폴더가 원드라이브와 링크되어 사용됩니다. 그래서 심볼릭 링크 형태로 Desktop 폴더가 물리적으로는 C:\Users\<user-id>\Desktop 으로 연결됩니다.

    웃긴 점은 원드라이브를 지우면 이 링크가 복원되나 했더니, 그것도 아니었습니다. 여전히 Desktop 디렉토리는 OneDrive 하위에 위치해 있게 됩니다. 잘못해서 지우면 탐색기를 실행할 때마다 에러를 뿜고, 지 맘대로 복구해버립니다.

    예전에는 설치 과정에서 로컬 계정을 사용할 수 있도록 여지를 주었지만, 얼마전부터인가 무조건 라이브 계정을 사용해야하고 원드라이브 사용을 강제하고 있습니다. 이를 회피하려면, 설치 시 네트웍 연결 과정에서 Shift + F10 키를 눌러 CMD창을 실행하고 oobe\bypaddnro를 입력합니다. 그렇게 되면 다시 재부팅되고 다음부터는 인터넷 연결 없이 로컬 계정 설치를 진행할 수 있습니다.

    그렇게 되면 깔끔하게, 이전처럼 User 홈 디렉토리 밑에 위 사용자 폴더가 정상적으로 위치해 있는 것을 확인할 수 있습니다. 원라이브와의 싱크도 하지 않습니다.

  • 스팀덱 구입은 거의 한달 전이었는데, 사 놓고 한 두번 켜본 다음 방치 수준이었습니다. 가장 용량이 작은 64GB 모델을 구입했고, 어짜피 SSD를 교체하려고 마음 먹은지라, SSD가 오기 전까지는 별다른 할 일이 없어서…

    교체 난이도는 너무나 낮습니다. 몇개 나사 풀고, 그냥 교체하면 끝인거라, 10분 정도 걸린듯 하네요.

    구매했던 1TB SSD가 도착을 했고, 교체 방법까지 상세히 적혀져 있는 웹페이지를 참고하여 교체 성공.

    https://www.ifixit.com/Guide/Steam+Deck+SSD+Replacement/148989

    다음으로, 복구 이미지를 이용하여 복구까지 완료하였습니다.

    https://help.steampowered.com/en/faqs/view/1b71-edf2-eb6d-2bb3

    이제, 구입할 때 계획했던대로, 로봇의 원격제어를 위한 우분투 설치 or 게임 약간 (^^;;)을 해봐야겠습니다.

  • Cockpit은 웹 기반의 리눅스 서버 GUI 도구 플랫폼입니다. 보통 ssh로 접속하여, 이것저것 터미널 명령어를 이용해서 설정 및 사용도 가능하지만, Cockpit을 사용하면 웹 기반의 GUI 환경에서 작업이 가능합니다.

    https://cockpit-project.org/

    설치도 매우 간단합니다. Ubuntu에서도 쉽게 apt를 이용해서 설치가 가능합니다.

    $ sudo apt install cockpit

    실행은 따로 할 필요없이, 자동으로 서비스로 등록되어 부팅 후에 자동 실행됩니다. 기본포트는 9090으로 설치후 https://localhost:9090으로 접속하면 다음과 같은 화면을 보실 수 있습니다.

    크롬 등 브라우져에서 비보안접속 경고가 떠도 일단은 그냥 접속진행하셔도 무방합니다. 로그인은 현재 PC의 사용자 계정으로 접속하면 됩니다.

    이제 좌측 메뉴에서 기본적으로 제공되는 정보를 이용해 PC 모니터링이 가능합니다. 터미널 실행도 가능합니다.

    좌측의 도구는 사용자가 직접 개발하여 추가도 가능합니다.

    사실 Cockpit에 관심을 가지게 된 이유가, 로봇의 파라미터 설정, 모니터링 및 유지보수가 목적이었는데, 사용자 도구를 이용하여, ROS의 rviz 등을 표시해서 간단한 제어 및 모니터링 기능을 추가해보는 것도 괜찮을듯 합니다.

Join 900+ subscribers

Stay in the loop with everything you need to know.