GDM 모니터 설정 변경하기

사용자 모니터 설정은 ~/.config/monitors.xml에 저장된다. GNOME에서 사용하는 모니터 설정을 GDM에도 적용하자.

sudo cp ~/.config/monitors.xml ~gdm/.config/monitors.xml
sudo chmod gdm:gdm  ~gdm/.config/monitors.xml

monitors.xml를 복사해도 설정이 적용 안되는 경우 아래와 같이 GDM과 GNOME에서 사용하는 디스플레이 서버가 같은지 확인해 보자. 다음과 같은 경우일 수 있다.

  • GDM은 Wayland를 사용하고 GNOME은 Xorg를 사용하는 경우
  • GDM은 Xorg를 사용하고 GNOME은 Wayland를 사용하는 경우

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

이동평균에 대하여 (feat. Python)

이전에 평균에 대한 글을 쓴 적이 있다. 그 다음 편으로 예정 되어 있던 이동 평균에 대한 알아보자.

이동평균

통계에서 이동평균은 전체 데이터 집합의 여러 하위 집합에 대한 일련의 평균을 만들어 데이터 요소를 분석하는데 사용되는 계산이다. 금융에서 이동평균은 분석에 일반적으로 사용되는 주식 차트 이다.

  • 이동평균은 기술분석에서 일반적으로 사용되는 주식 지표이다.
  • 주식의 이동 평균을 계산하는 이유는 지속적으로 업데이트되는 평균가적을 생성하여 지정된 기간동안의 가격 데이터를 평활화 하기 위해서이다.
  • 단순 이동평균은 과거의 특정 일수 동안 주저진 가격 세트의 산술 평균이다. 예를들어 15, 30, 100일 또는 200일이 될 수 있다.
  • 결과값이 지연되어 나타나는 경향이 있다.
  • 이동평균의 기간이 길어질 수록 지연이 커진다.
  • 최근값에 더 많은 가중치를 두려면 가중이동 평균이나 지수이동평균을 사용해야한다.

지난번 알아 보았던 평균과 평균 필터는 전체 값중 중간 값을 알수 있기 때문에 유용하지만 전체 샘플의 수가 많으면 최근 값이 평균값에 미치는 영향이 작아 지기때문에 누적 데이터가 많아 질수록 현재의 변화 상태를 반영하지 문하는 문제가 있다.

이 포스트에서 사용된 Raw 데이터는 Bitcoin data at 1-min intervals from select exchanges, Jan 2012 to March 2021에서 다운 받은 데이터 중 최근 365일 데이터를 사용하였다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

평균과 평균필터(Feat. Python)

산술 평균 $n$개의 수 $x_1, x_2, … x_n$ 가 있다. 이 수의 산술 평균은 $A_n$ 은 다음과 같이 정의 된다. $$ A_n = \frac{x_1 + x_2 + … + x_n}{n}, A_0 = 0 \tag{1}$$ 그냥 주어신 수의 합을 수의 개수로 나누면 된다. 이러한 식을 배치식이라고 한다. 고정된 데이터의 경우 배치식을 이용햐여 구하면 된다. def avg_batch(v): return sum(v)/len(v) if __name__ == '__main__: ages = [10, 12, 26, 30, 40, 33, 21, 34, 54, 3] print(f'Average using Batch Expression: {avg_batch(ages)}') 하지만 입력 데이터가 계속 실시간으로 계속 추가 된다면?

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

리눅스에서 한/영 전환키 사용하기

문제점

  • 영문 키보드 구입
  • 오른쪽 Alt 키 (Alt_R)을 한글 키로 사용 하고 싶음.
  • IBus 등에서 한/영 변환을 Alt_R 키로 등록
    • 다른 프로그램에서는 잘 동작.
    • Alt_R 키를 단축키로 사용하는 프로그램(Chrome)등에서는 동작이 안됨
  • Ctrl_R은 Hanja 키로 매핑 시키고 싶지 않음.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

fcitx 한글 입력기 사용하기

Gnome 기본 IM(Input Method)인 IBus 입력기에 문제가 있어 fcitx로 입력기를 변경 했다.

Arch Linux

pacman -S fcitx5 fcitx5-hangul fcitx5-gtk fcitx5-qt fcitx5-configtool 

/etc/environment

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

시스템을 재시작 하면 fcitx가 자동 실행된다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Insync 3.x auto start with xvfb and systemctl

이 글에서는 Google Drive 와 One Drive의 third-party 동기화 유틸인 Insync의 headless 버전을 설치 하고 자동 실행 하는 방법에 대하여 알아본다.

Insync: Google Drive Syncing Application for Linux

Insync: 리눅스를 위한 Google Drive 동기화 어플리케이션

Insync가 3.x 버전으로 판올림 되면서 headless 버전이 없어 졌기 때문에 Gnome등의 UI로 로그인 하여야 Insyc를 설행 할 수 있다.

하지만 서버의 경우 자동 로그인을 실행하면 보안 상의 문제가 있으므로 자동 로그인 설정을 할 수 없다.

이문제를 해결 하기 위하여 xvfb와 systemctl 을 이용하여 Insync UI 버전을 자동 실행하는 방법에 다여 알아본다.

3.x 버전의 Headless 버전이 릴리즈 되었다. 이를 이용한 자동 실행 방법은 다음 Insync 3.x auto start with systemctl를 참고한다.

Desktop 버전 라이센스로 같이 사용할 수 있을 줄 알았는데. 서버용 라이센스를 별도로 구매 해야 한다. WTF 그것도 시작 가격이 일년 39.99 달러, 거기다 나처럼 Google Workspace를 사용하여 gmail.com 이 아닌 커스텀 도메인 을 사용하는 사람은 일년에 159.99 달러다. 이글을 참고 하여 Insync Desktop 버젼을 자동실행 하는 방법을 사용하자.

Prerequisites

  • insync
  • xvfb

Insync 설치

Insync의 설치 방법은 Insync - Linux에서 Google Drive Desktop Client 사용하기를 참고 한다.

xvfb 설치

sudo apt install xvfb

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Insync 3.x auto start with systemctl

Desktop 라이센스로 같이 사용할 수 있을 줄 알았는데. 서버용 라이센스를 별도로 구매 해야 된다. WTF 그것도 일년에 39.99 달러, 거기다 나처럼 Google Workspace를 사용하여 gmail.com 이 아닌 커스텀 도메인 을 사용하는 사람은 일년에 159.99 달러다. 돈이 썩어 나는구나. 다음글을 참고 하여 Insync Desktop 버젼을 자동실행 하는 방법을 사용하자. Insync 3.x auto start with xvfb and systemctl. 굳이 연간 39.99 달러나 159.99 달러를 내면서 headless 버젼을 사용하고 싶으신 분은 다음글을 참고 하기 바란다.

그냥 GoodSync로 갈아 타 버릴까?

이 글에서는 Google Drive 와 One Drive의 third-party 동기화 유틸인 Insync의 headless 버전을 설치 하고 자동 실행 하는 방법에 대하여 알아본다.

Insync: Google Drive Syncing Application for Linux

Insync: 리눅스를 위한 Google Drive 동기화 어플리케이션

Insync가 3.x 버전으로 판올림 되면서 headless 버전이 사라지는 바람에 xvfb를 통해 우회 실행 하는 방법에 대하여 설멍한 적이 있다.

하지만 Insync 3.x 대한 headless 버전이 릴리즈 되었기 때문에 이런 번거로운 작업이 필요 없어 졌다.

잘 돌아가는 Insync를 headless 버전으로 바꾸기 귀찮아서 미루고 있었는데 이번에 Ubuntu Box를 Bionic에서 Focal로 판올림 하는 김에 시간을 내서 headless 버전으로 변경 하였다.

Prerequisites

  • insync-headless

Insync headless 설치

Insync의 설치 방법은 Insync - Linux에서 Google Drive Desktop Client 사용하기를 참고 한다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

어떤 SHELL을 사용하고 있는지 확인해보자.

어러 쉘이 있다. sh(Bourne Shell)을 기반으로 하는 Bash(Bourne-again shell), zsh(Z shell) 등은 문법이 거의 똑같지만 완전히 같지는 않다. 쉘스크립트를 만들어 실행 하는 경우 #! 지시자로 사용할 쉘을 지정할 수 있기 때문에 크게 문제가 없지만 source 명령이나 dot(.) 명령으로 현재 환경(Current Environment Context)에서 스크립트를 실행하는 경우 사용중인 쉘의 종류에 따라 문법이 달라 문제가 발생 할 수 있다. 주의해서 처리 하도록 하자.

기본쉘을 Zsh 사용하기 시작하면서 겪은 문제다. 보통 리눅스에서 기본쉘은 Bash 이기 때문에 거의 모든 프로그램들이 Bash 위주로 구현되어 있기 때문에 발생 하는 문제이다.

대부분 다음과 같은 문제이다.

실행 스크립트의 파일 이름을 알고 싶을때 Bash에서는 $BASH_SOURCE를 사용한다. 하지만 이 변수는 Bash 에서만 지원됨으로 Zsh에서는 $0 변수를 사용해야 된다. Bash에서도 $0변수를 지원하지만 Bash에서 $0 변수를 사용하면 쉘의 정보((bash)가 표시된다.

쉘스크립트에서 $0 는 실행파일의 이름을 나타내는 변수 이다. Bash에서 $0 변수는 쉘이 시작할 때만 초기화 되지만 dot 명령은 새로운 쉘을 시작하는 것이 아니라 현재 쉘의 컨텍스트에서 실행 하는 것이므로 쉘에서 echo $0 를 실행한것과 같은 결과(즉, bash)가 출력된다. 그런데 Zsh 에서는 $0가 스크립트 이름으로 세팅된다.

구글링을 해보면 Zsh에서 Bash$BASH_SOURCE 와 가장 가까운 결과를 내는것은 ${(%):-%x} 라고 한다. 하지만 $0도 같은 결과는 내기 때문에 그냥 사용하기로 한다.

다음은 ./env 파일의 내용이다.

echo \$BASH_SOURCE = $BASH_SOURCE
echo \$0 = $0

각 SHELL에서 실행 해 보자

. ./env

다음과 같은 출력을 얻을 수 있다.

bash

$BASH_SOURCE = ./env
$0 = bash

zsh

$BASH_SOURCE =
$0 = ./env

따라서 실행 되는 스크립트의 이름 알기 위해서는 다음과 같이 쉘에 따라 다른 방식을 정용하여야 한다.

SH_NAME=$(basename $(readlink /proc/$$/exe))

case ${SH_NAME} in
	"zsh") SELF=$(realpath $0) ;;
	"bash") SELF=$(realpath ${BASH_SOURCE[0]}) ;;
	*) echo "Unknown SHELL $SH_NAME" && exit 0 ;;
esac

echo $SELF

Bash 또는 Zsh 만 사용한다면 다음과 같이 사용해도 같은 결과를 얻을 수 있다.

SELF=$(realpath ${BASH_SOURCE[0]:-$0})
echo $SELF

아래와 같이 env 파일을 만들고 dot command로 실행해보자

SELF=${BASH_SOURCE[0]:-$_}
echo $(basename $SELF) is located at $(realpath $SELF)

env 파일 실행

. ./env

Bash, Zsh 둘다 같은 결과를 얻을 수 있다.

env is located at /home/euikook/src/env

$SHELL

/etc/password 파일에 정의된 사용자에 할당된 SHELL 출력한다.

echo $SHELL

Cons

지정된 쉘 정보를 표시 하지만 현재 사용중인 SHELL 정보를 출력하지 않는다.

$ cat /etc/passwd | grep $USER
john:x:1000:1000::/home/john:/usr/bin/zsh

cat 명령으로 /etc/passwd 파일을 확인 결과 /usr/bin/zsh 가 쉘로 할당되어 있다.

아래와 같이 bash로 쉘을 변경 후 $SHELL$0 정보를 출력 해보자.

$ bash
$ echo echo User SHELL is $SHELL, Current SHELL is $0
User SHELL is /usr/bin/zsh, Current SHELL is bash

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Shell에서의 Exit Status에 대하여

Exit Status에 대하여 알아보자.

요즘은 GUI를 많이 사용하지만 지금도DOS나 UNIX계열의 시스템에서는 쉘(SHELL)을 통해 프로그램을 실하고 프로그램의 출력을 통해 프로그램이 정상적으로 실행되었는지를 판단하한다.

전통적으로 UNIX 계열 프로그램은 침묵은 금이라는 유닉스의 설계 철학에 따라 ls와 같이 명시적으로 정보의 출력을 요구 하는 명령이 아닌경우 아무런 출력이 없으면 정상적으로 실행 된것이다.

Speech is silver, but silence is gold.

그렇다면 프로그램에서 다른 프로그램을 실행 하였을 때 자신이 실행한 프로그램이 정상적으로 수행되었는지 어떻게 판단 할까?

정답을 말하면 모든 명령은 종료될 때 Exit Status를 반환하는데 (명시적으로 지정하지 않을 경우 기본값을 반환한다.) 프로그램은 이 Exit Status를 가지고 자신의 실행한 프로그램이 정상적으로 종료 되었는지 판단 할 수 있다.

Exit Status는 O 에서 255 사이의 값을 가지고 쉘의 경우 125 이상의 값을 사용한다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Windows 환경에서 사설 인증 기관 인증서(Private CA Certificate) 설치 하기

직접 서명한 인증서를 가지고 서비스를 제공 하는 경우 인증서를 인증한 인증 기관의 정보가 브라우저 또는 운영체제에 없기 때문에 경고 메시지를 보게 된다. 경고 메시지를 없에려면 인증서를 인증한 사설 인증기관의 인증서를 브라우저 또는 운영체제에 설치 하여야 한다. 이 글에서는 Windows환경에서 사설 인증 기관 인증서를 설치 하는 벙법에 대하여 알아본다.

Windows는 운영체제 수준에서 CA 인증서를 관리 하기 때문에 운영체제의 CA 인증서 저장소에 인증서를 등록하면 특별한 경우를 제외 하면 거의 모든 프로그램에서 해당 인증서에 접근 할 수 있다.

MMC(Microsoft Management Console)를 이용하여 설치 하기

mmc를 입력 하고 Enter 키를 누른다.

시작 에서 실행을 검색하여 실행한다.

시작 > 실행

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share