Ubuntu 앱에 QT_AUTO_SCREEN_SCALE_FACTOR 적용하기

4K 등 HiDPi 환경에서 Ubuntu에 apt나 Ubuntu Software를 이용해 앱을 설치한 후 이를 실행을 하게 되면 레이아웃이 보기 싫게 깨지는 경우가 있다. Gtk 환경의 앱은 어느 정도 자체적으로 지원이 되는듯 한데, Qt 환경의 앱은 그러지 않는데, QT_AUTO_SCREEN_SCALE_FACTOR 환경 변수를 설정하면 쉽게 적용이 가능하다.

예를 들어, 스크린 녹화 앱인 vokoscreen의 경우 설치한 후에 실행을 하게 되면,

와 같이 되는데 (스크린샹으론 잘 구별이 되진 않지만….), QT_AUTO_SCREEN_SCALE_FACTOR 환경 변수를 설정한 후 실행하면,

와 같이, UI 레이아웃의 비율이 원래와 같이 나옴을 볼 수 있다.

수정하는 방법은 각 앱의 desktop 파일을 검색하고, (보통은 /usr/share/applications 디렉토리에 있음) 편집기를 이용해 해당되는 앱의 desktop 파일을 다음과 같이 수정한다.

[수정전]

[Desktop Entry]
Comment=screencast
Exec=/usr/bin/vokoscreen
Icon=vokoscreen
Name=vokoscreen
StartupNotify=false
Terminal=false
Type=Application
Categories=AudioVideo;Recorder;
Keywords=Audio;Video;Recorder;Screencast;

[수정후]

[Desktop Entry]
Comment=screencast
Exec=env QT_AUTO_SCREEN_SCALE_FACTOR=1 /usr/bin/vokoscreen
Icon=vokoscreen
Name=vokoscreen
StartupNotify=false
Terminal=false
Type=Application
Categories=AudioVideo;Recorder;
Keywords=Audio;Video;Recorder;Screencast;

저장하고, 예전과 같이 앱을 실행하면 됨.

Advertisements

Ubuntu 커스텀 설치 이미지 만들기 (Make the custom ISO image of Ubuntu)

설명

cubic 설치

$ sudo add-apt-repository ppa:cubic-wizard/release
$ sudo apt install cubic

설치 이미지 다운로드 (주의! Live 이미지는 자동설치 지원 안됨.)

$ wget http://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ubuntu-18.04.4-server-arm64.iso

cubic 실행 (실행시 root 권한이 필요하므로 계정 암호 입력하여 진행)

작업에 사용할 디렉토리 생성하고 선택, 다음으로 진행

다운로드한 설치 이미지를 선택, 그러면, 다음과 같이 정보들이 자동으로 입력됨. Original ISO… 부분은 절대 수정하면 안되고, Custom ISO… 부분은 작업 디렉토리를 제외한 나머지 부분은 수정 가능.

다음으로 진행.

자동으로 파일 및 디렉토리를 복사한 후, 작업을 위한 chroot 환경의 터미널이 뜸.

이제 이 터미널 내에서 원하는 작업을 해주면 됨. 프로그램 설치는 apt를 이용해서 설치. 스크립트나 기타 등등의 작업도 가능.

작업이 완료되었으면, Next를 눌러 다음으로 진행

여기에선 설치하고 싶지 않은 패키지들을 선택 가능. 필요없다고 생각하는 것들을 선택하면 됨.


3번째 탭으로 이동. 설치 자동화 스크립트 파일을 하나 추가한다. seed 파일의 문법은 https://help.ubuntu.com/lts/installation-guide/amd64/apbs04.html을 참고한다. 파일을 추가하기 위해서 하단의 + 버튼을 누르고 오른쪽 편집창에 스크립트를 입력한다. 이번 과정에서 사용한 seed 파일은 다음과 같다.

### Automatic Installation
d-i auto-install/enable boolean true
d-i debconf/priority select critical


### Localization
d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF-8
# Keyboard
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us


### Network
d-i netcfg/choose_interface select auto
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/use_autoconfig boolean false
d-i netcfg/disable_dhcp boolean true
#d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually

# Static network configuration.
d-i netcfg/get_ipaddress string 192.168.1.11
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1
d-i netcfg/get_nameservers string 192.168.1.1
d-i netcfg/confirm_static boolean true

d-i netcfg/get_hostname string ubuntu
d-i netcfg/get_domain string


### Mirror settings
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string


### Account setup
d-i passwd/root-login boolean false
d-i passwd/make-user boolean true

d-i passwd/user-fullname string ubuntu
d-i passwd/username string ubuntu
d-i passwd/user-password password ubuntu
d-i passwd/user-password-again password ubuntu
d-i user-setup/allow-password-weak boolean true


### Clock and time zone setup
d-i clock-setup/utc boolean true
d-i time/zone string Asia/Seoul
d-i clock-setup/ntp boolean true


### Partitioning
d-i partman-auto/init_automatically_partition select biggest_free
d-i partman-auto/method string regular
d-i partman-swapfile/size string 4096

d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

### Update
d-i pkgsel/update-policy select none

### Bootloader
d-i grub-installer/only_debian boolean true
d-i grub-installer/bootdev  string default


# Verbose output and no boot splash screen.
d-i debian-installer/quiet	boolean false
d-i debian-installer/splash	boolean false
d-i finish-install/reboot_in_progress note

이상하게, 몇개의 특정 스크립트 이외에 다른 스크립트들은 거의 반영이 안된다. 완전 자동화 설치는 아니고, 부분부분은 사용자가 개입을 해줘야한다. 버그인듯한데… 좀더 살펴봐야 할듯.

다음으로 이 seed 파일을 사용하기 위해, 부트 메뉴 등을 설정해야 한다. 네번째 탭인 ISO Boot Configuration으로 이동, grub.cfg 파일에 다음과 같은 엔트리 하나 추가.

menuentry "Automatic Install Ubuntu Server" {
	set gfxpayload=keep
	linux	/install/vmlinuz  boot=casper file=/cdrom/preseed/auto-cli.seed auto=true priority=critical locale=en_US netcfg/disable_autoconfig=true automatic-ubiquity noprompt noshell quiet ---
	initrd	/install/initrd.gz
}

다음으로 isolinux 설정. 역시 엔트리를 하나 추가하고, 기본 선택을 자동설치로 변경. (isolinux/txt.cfg 파일 수정)

default auto-install
label auto-install
  menu label ^Automatic Install Ubuntu Server
  kernel /install/vmlinuz
  append  boot=casper file=/cdrom/preseed/ubuntu-server.seed vga=788 initrd=/install/initrd.gz auto=true locale=en_US priority=critical netcfg/disable_autoconfig=true automatic-ubiquity noprompt noshell quiet ---

수정이 완료 되어 있으면, Generate 버튼을 눌러 다음으로 진행.


이제 사용자의 ISO 파일을 생성함. 종료하고 작업 디렉토리로 가보면, 사용자 설치 이미지가 생성되어 있는 것을 볼수 있음.

이걸 가지고 USB등 설치 이미지를 만들어 설치하면 끝!.

참고링크

Scratch 3.0 개발 환경 구축 (renew)

기존 Scratch 3.0 개발 환경 구축 (https://ahnbk.com/?p=366) 포스팅이 있는데, 이번 macOS 카탈리나에서 새로 개발 환경을 구축하면서 약간 달리지는 부분에 대해 새로 간단히 정리합니다.


  • Node.js 설치

macOS에선 기존과 마찬가지로 homebrew를 먼저 설치하고, 이를 이용하여 설치하는 것이 간편함. 현재 LTS 버전은 12.6.1이지만, scratch의 경우 여전히 10버전까지만 지원함. 따라서 다음과 같이 입력하여 설치.

$ brew install node@10

  • Scratch 소스 받아오기

개발에 사용될 임의의 디렉토리를 하나 만들고, Scratch 각 파트별로 소스 clone.

$ mkdir scratch_dev
$ cd scratch_dev
$ git clone https://github.com/LLK/scratch-gui.git
$ git clone https://github.com/LLK/scratch-vm.git
$ git clone https://github.com/LLK/scratch-l10n.git

사용자가 직접 Interaction 할 수 있는 GUI ( scratch-gui), Scratch의 실행 (Back-end)을 담당 (scratch-vm), 한글 관련 작업 (scratch-l10n).


  • 빌드하기

[scratch-l10n]

$ cd scratch-l10n
$ npm install
$ npm run-script build
$ npm link

[scratch-vm]

$ cd scratch-vm
$ npm install
$ nom link

[scratch-gui]

$ cd scratch-gui
$ npm install
$ npm link scratch-l10n scratch-vm

빌드 완료


  • 실행
$ cd scratch-gui
$ npm start

사파리를 띄우고, http://0.0.0.0:8601로 접속.

끝! 여전히 잘됨..^^

Tips about Zsh on macOS

macOS가 Catalina로 버전업이 되면서, 터미널의 기본 shell이 Zsh가 기본값으로 변경되었습니다. 이에 따른 몇가지 팁들 정리.


  • 환경설정 파일은 .zshrc

기존 bash shell의 경우, .bashrc 파일을 사용했다면, Zsh의 경우 .zshrc 파일을 사용함


  • 터미널에서 색상 지원

기본 설정이 색상지원이 안되도록 되어 있어, 밋밋한 흰색만 나옴. 색상 지원이 가능하게 하려면, .zshrc 파일 내에 다음의 문구 추가하면 됩니다.

autoload -U colors && colors
export CLICOLOR=1

  • 프롬프트 변경

Shell의 프롬프트는 PS1이라는 환경변수를 통해 설정 가능, 기본 값은 색상값 없이 정보만 표시하도록 되어 있어 다음과 같이 보이는데,

이를 색상과 같이 좀 이쁘게 설정하려면, .zshrc 내에 PS1 값을 다음과 같이 설정하면 됩니다.

export PS1="%{%F{green}%}%n@%m%f: %{%F{blue}%}%1~ %f%# "

다시 쉘을 실행해보면,

Zsh의 경우 다양한 플러그인을 통해 다양한 정보를 프롬프트에 표시할 수 있습니다만, 전 복잡한건 딱 질색인 타입이라, 위 상태만으로도 만족합니다..^^


  • root shell 변경

root의 shell은 또 bash가 기본값으로 설정되어 있습니다. macOS에선 root shell을 사용할 일이 거의 없는지라 상관없지만, 변경하고자 한다면,

$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh

와 같이 입력하면 root에서도 zsh를 기본값으로 사용할 수 있습니다.

Using Gazebo11 with ROS1 Melodic

Gazebo 11이 지난 달에 릴리즈 되었습니다. 이 버전이 Gazebo의 마지막 릴리즈 버전이고, 이후론 지원 기간까지 새로운 기능보단, 주로 버그 수정 등만 지원됩니다. 새로운 Ignition Gazebo가 나올 예정인데, 이는 Ignition Robotics라는 곳에서 업데이트 등을 지원할 예정입니다.

현재의 ROS의 최근 LTS 버전은 Melodic으로, 공식적으론 Gazebo 9만 지원합니다. 따라서 Gazebo 11을 사용하기 위해선 ROS와 연동하기 위한 패키지들을 새로 빌드해줘야 합니다.


ROS1 Melodic이 설치된 상태에서, Gazebo 11을 설치하려면 패키지의 의존성 등을 고려하여 다음과 같이 입력합니다.

$ sudo apt install gazebo11 libgazebo11 gazebo11-common libgazebo11-dev 

이러면, Gazebo 9은 자동으로 제거가 되고, Gazebo 11이 설치됩니다.

이제 ROS와 연동하기 위한 gazebo_ros_pkgs를 새로 받아 빌드합니다.

catkin workspace 내에서 작업해야 하므로,

$ cd ~/catkin_ws/src
$ git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git
$ cd gazebo_ros_pkgs
$ git checkout melodic-devel
$ catkin build 

빌드가 완료되면, 예전과 같이 정상적으로 ROS1과 연동하여 사용이 가능합니다. 플러그인도 사용 가능.

$ roslaunch gazebo_ros empty_world.launch

위와 같이 설치를 하게 되면, ros-melodic-desktop-full의 의존성이 깨지므로, apt를 사용할때 autoremove로 ROS 패키지들을 자동으로 지우게끔 유도하게 되는데 이를 해결하려면,

$ sudo apt install ros-melodic-perception ros-melodic-desktop ros-melodic-ros-control ros-melodic-ros-controllers

와 같이 각각의 패키지들을 설치하면 해결되고, 그 외의 패키지는 필요없는 것들이니 지워도 무방합니다.

끝.