RaspberryPi XRDP blank screen issue - 라즈베리파이 원격접속 빈 화면 이슈

XRDP를 통한 원격 접속 시, 라즈베리파이에 root 권한을 가진 계정으로 접속하면 빈 화면만 뜨는 이슈가 있음. 따라서 새로 유저를 추가해서 접속 하면 됨. 출처 : https://www.reddit.com/r/raspberry_pi/comments/qw1cdw/raspberry_pi_4_xrdp_windows_10_remote_desktop/

라즈베리파이 와이파이 절전모드 해제

이미지
 아래 명령어로 와이파이 절전 모드를 OFF 시킬 수 있음. sudo iwconfig wlan0 power off 부팅시에 자동으로 적용하려면 /etc/rc.local 파일에 아래 1줄 추가 /sbin/iwconfig wlan0 power off

[NO-IP] Dynamic Update Client Install on Raspberry PI

 Refer to  https://www.noip.com/support/knowledgebase/install-ip-duc-onto-raspberry-pi Client Install $ mkdir /home/pi/noip $ cd /home/pi/noip $ wget www.noip.com/client/linux/noip-duc-linux.tar.gz $ tar noip-duc-linux.tar.gz $ cd noip-2.1.9-1 $ sudo make $ sudo make install Client 실행 $ sudo /usr/local/bin/noip2 Client 실행 확인 $ sudo noip2 ­-S 부팅 시에 자동으로 noip2 가 실행 되도록 설정. 다음 내용을 noip2 파일로 작성 #! /bin/sh # . /etc/rc.d/init.d/functions # uncomment/modify for your killproc case "$1" in start) echo "Starting noip2." /usr/local/bin/noip2 ;; stop) echo -n "Shutting down noip2." killproc -TERM /usr/local/bin/noip2 ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 'noip2' 파일에 실행권한을 준 뒤 '/etc/init.d'로 복사 $ chmod +x noip2 $ cp noip2 /etc/init.d 그 다음 심볼릭 링크를 생성하여 런레벨 3로 등록. $ cd /etc/rc3.d $ ln -s ../init.d/noip2 S01noip2 재부팅 후 사용자 계정 상태에서 'ps -ef  | grep noip2' 명령어로 프로세스가 동작 중인지 확인

Crontab - 재부팅 후 시작 시, 특정 유저 권한으로 명령어를 실행 시키는 방법

Root 권한으로 크론탭 작성 sudo crontab -e

[교육] 부모의 인문학

독서  책 읽는 모습을 보여주자. 다음 이야기를 상상하게 해 보자. 본인의 생각을 말하게 해 보자. 공부 함께 앉아서 공부 하는 시간을 갖자 하지만 콘텐츠는 각자의 것으로. 공부한 것을 다른사람에게 다시 가르치게 한다. 정적인 공부에 만족하지 말고 체험적인 공부를 하도록 도와주자. 운동 운동 하는 모습을 보여주자. 산책을 하며 충분한 대화를 나누는 시간을 갖도록 하자. 가끔은 산책을 하며 혼자 스스로 생각하는 시간을 갖게 하자. 여행 학원에 보내지 말고 여행을 다니면서 다양한 세상에 눈을 뜨게 하자. 같이 계획을 짜고 역할을 나누어서 프로세스에 참여 시키자. 요리 같이 재료를 구매하고 다듬고 조리까지 모든 프로세스에 참여 시키자.

[종교] 소개팅에서 종교가 의미하는 것

지난번에 이어서 종교에 대한 이야기를 또 한번 해 볼까 한다. 나는 얼굴도 별로고 키도 작은 베타메일인지라 주변에서 소개팅을 시켜 준다고 하면 묻고 따지지도 않고 무조건 OK를 했었다. 심지어 상대방 사진도 달라고 하지 않았다. 일단 주선자가 나를 소개팅에 내보낸다는 의미가 주선자가 나를 그래도 자신의 인맥 중에 소개팅이라는 시장에 내놓았을 때 부끄럽지 않다는 의미라고 생각 했기 때문이다. 그래서 주선자에게 고마움을 느끼며 처음엔 들어오는 족족 소개팅에 나갔다. 많이는 아니지만 다양한 분들을 만나게 되었는데, 결국 나중에는 종교있는 사람은 정중히 거절하게 되었다. 그 이유는 다음과 같다. 1. 우선 순위 종교가 인생 1순위 인 사람들이 있다. 종교 생활과 그 외 사회생활을 균형있게 하는 사람이라면 문제가 되는 경우가 거의 없지만, 과유불급이라고 너무 지나치면 역시 좋지 않은 법. 하루 종일 종교활동에 빠져있는 사람이라면, 나의 우선순위는 당연히 순위권 밖으로 밀려나기 때문에, 만남을 이어가더라도 시간을 맞추기가 어렵다. 어떤 분은 일요일에 오전 7시부터 오후5시까지 교회에만 있는 분이 있었다. 교회에서 성가대도 하고 아동부 선생님도 하고, 그 외 기타 이벤트 준비도 하기위해 가끔 토요일에도 교회를 나간다. 분명 크리스마스때에도 남자친구보다는 하나님과 함께 교회에서 예배타임을 보낼것임이 분명 하리라. 2. 전도 자꾸 소개팅 자리에서 전도를 하려고 한다. 어떤 분은 처음 만난 날에 대뜸 종교를 묻더니 내가 무교라고 하니까, 바로 교회를 같이 다니 자고 했다. 나는 바로 "저는 무교에다가 무신론자 입니다" 라고 하니까 그 이상 대화는 이어지지 않았다. 그게 그 분을 본 처음이자 마지막날이었다. 그런데 종종 몇다리 건너 소개팅이 들어오는 경우가 있었다. 주선자도 연락처만 전달받고 그 이외 정보는 무엇인지 등은 모르는 경우가 있었는데, 이러한 경우엔 이전과 마찬가지로 소개팅 자리에 무조건 나갔다. 그 다음이 중요한데, 처음 만난 자리에서 대뜸 직접적으

[종교] 유치원생이 깨달음으로 무신론자가 되기까지

나는 무신론자이다. 그러므로 믿고 있는 종교가 없다고 말할 수 있겠다. 종교는 없지만 신은 있다고 생각하는 사람도 있을 것이다. 하지만, 역시 나는 신, 절대자, 조물주와 같이 불리는 특정 한 존재는 없다고 생각한다. 개인적으로 겪은 몇 가지 경험과 사례를 통해 내가 왜 무신론자가 되었는지 적어보려고 한다. 경험 1 1992년, 동네 유치원에서 만나 친해진 아이가 있었는데, 어느 날 그 아이가 나에게 교회를 같이 가자고 권유를 했다. 가면 맛있는 걸 준다고 했던 것 같다. 그래서 다가오는 일요일에 그 아이와 함께 교회에 가게 되었다. 사람들이 엄청 많고 시끄럽고 긴 의자에 빽뺵이 앉아서 뭔가 두꺼운 책을 앞에 놓고 있었다. 곧 이어 찬송가를 부르는데 내용이 하나님 어쩌고 천국 어쩌고 하는 내용이었다... 당시 어른들이 보기에는 고작 유치원생이었지만, 나는 손범수 아저씨가 진행하는 가요톱텐을 보고 자랐기 때문에 동요 같은 건 수준이 낮은 노래고 나와 맞지 않는다고 애늙은이 같은 생각을 하고 있었다. 그 때문일까? 교회에서 부르는 노래가 구리다는 것을 바로 알아차려 버렸다. 특히 가사가 구렸다. 그리고 예배 중간에 십자가가 그려진 갈색 호그와트 마법주머니같은거에다가 사람들이 돈을 넣는 것을 보게 되었는데, 내 또래애들은 부모님께 천원짜리를 받아서 주머니에 돈을 넣었다. 그때 당시엔 헌금이 뭔지 그리고 십일조라는 개념을 모른 채, 그 마법 주머니가 신자들의 돈을 빨아먹는 모습을 그냥 쳐다보기만 했다. 나는 돈은 없고 가진거라곤 부랄 두짝이 전부인 유치원생이기 때문이었다. 찬송가를 부르고 나서는 기도를 한다고 손에 깍지를 끼고 눈을 감으라고 했다. 사람들이 주기도문(?)을 외는데 내용이 유치원생인 내게는 충격적이었다. 시작부터 대뜸 "하늘에 계신 우리 아버지~" 하는데, 우리 아빠는 집에 잘 있는데 뭔 개소리인가 싶었다... 그날의 예배가 끝나고, 요구르트와 초코파이를 나누어 주었다. 맛있게 잘 먹었다. 아멘. 꺼억. 교회에 이쁜 누나들이 있어서 일

방구석 운동 - 문틀 철봉 (Pull up bar for doorways )

이미지
나이를 먹은 건 핑계에 불과하고, 몇 년 사이 그냥 게을러져서 몸이 많이 노쇠해졌다. 내일 모레 일흔을 바라보고 계신 우리 아부지가 나보다 더 건강하시다... 이제 정신차리고 운동하지 않으면 골로 갈 것 같아서 방구석에서라도 운동을 좀 해볼까 하고 문틀 철봉을 주문했다. 배송은 일주일전에 왔지만, 미루고 미루다 오늘에서야 언박싱 하고 설치를 하려고 한다. 역시 나란놈은 글러먹었나보다... 하... 당근에 내놓을까? 일단 언박싱 & 설치 고고 설치 가능한 넓이는 75cm에서 96cm 이다. 사용방법 책자가 있지만, 어려웡... 꼭!! 반드시 설치 동영상을 참고하라는 경고문이 동봉 되어 있다. 동영상을 보고 설치 방법을 잘 따라 해 보자. 3번에서 뭔가 느낌이 쎄.. 하지만 언박싱을 하고 설치를 해 보자. 깜박하고 중간 설치 과정 사진을 못찍었다. 언박싱을 하니, 그윽한 석유냄새가 진동을 한다. 5년 전에 갔던 두바이의 추억이 머릿속을 스쳐가지만 이내 정신차리고 설치를 해보자. 양쪽 끝을 돌려서 길이를 늘려야 하는데, 내가 빡대가리라 그런지 왼쪽 조정하고 오른쪽 조정하려는데 반대로 돌려서 길이가 다시 줄어드는 것이렸다. 반대로 오른쪽을 늘리고 다시 왼쪽도 늘리려는데 반대로 돌려서 길이가 다시 줄어들더라... 이런 X같은 마술봉! 이짓거리를 반복해서 하고있자니 운동은 개뿔 때려치고 호신용 쇠파이프로 사용 할까라는 생각이 든다. 어느정도 문틀길이에 맞게 되면, 제에에에일 중요한, 철봉을 돌려서 고정 시켜주는 작업 을 진행해야 한다. 이걸 안하면 폴링 인시던트 가능성 매우 높다. 마지막으로 세이프티락(?) 을 홈에 맞춰넣고 돌려서 잠가주면 설치가 완료 되시겄다. 마참내! 설치 완료! 이제 이 죽음의 문을 왔다 갔다 지나 칠 때 마다 무조건 턱걸이를 해야 한다.

[Shell] 중괄호 확장 (Curly Braces Extension)

 중괄호 확장 은 쉘 스크립트에서 문자열 목록을 생성하는 유용한 기술입니다. 예를 들어, 아래와 같이 입력하면 1부터 10 까지 스페이스로 구분된 출력이 나옵니다. $ echo {1..10} 1 2 3 4 5 6 7 8 9 10 이를 이용하면 쉽게 파일을 만들거나 디렉토리를 만들 수 있습니다. $ touch {a..z}.txt $ ls a.txt c.txt e.txt g.txt i.txt k.txt m.txt o.txt q.txt s.txt u.txt w.txt y.txt b.txt d.txt f.txt h.txt j.txt l.txt n.txt p.txt r.txt t.txt v.txt x.txt z.txt 좀 더 응용 하면 백업파일을 만드는 데에도 수월 합니다. $ ls | grep -e "[a-z]\.txt" | xargs -I{} cp {}{,.bak} $ ls a.txt c.txt.bak f.txt h.txt.bak k.txt m.txt.bak p.txt r.txt.bak u.txt w.txt.bak z.txt a.txt.bak d.txt f.txt.bak i.txt k.txt.bak n.txt p.txt.bak s.txt u.txt.bak x.txt z.txt.bak b.txt d.txt.bak g.txt i.txt.bak l.txt n.txt.bak q.txt s.txt.bak v.txt x.txt.bak b.txt.bak e.txt g.txt.bak j.txt l.txt.bak o.txt q.txt.bak t.txt v.txt.bak y.txt c.txt e.txt.bak h.txt j.txt.bak m.txt o.txt.bak r.

[Linux] 문자열을 포함하는 파일 찾기 (Find file including string)

이미지
  평소 파일을 찾기위해 많이 사용하는 명령어 입니다. find . -name "*.*" | xargs grep -ns --color=auto "검색키워드" 사용 쉘 커맨드 : find, xargs, grep ( Windows 에서는  POSIX기반 소프트웨어를 구동을 위해 Cygwin 또는 MinGW 를 사용 합니다. ) find : 파일 및 디렉토리를 검색할 때 사용하는 명령 -name "검색패턴" : 지정된 문자열 패턴에 해당하는 파일 검색 ( *.* : 모든 파일 형식 ) xargs : 파이프로 넘겨받는 앞 명령어의 출력 결과를 xargs 다음 명령어의 인자(Arguments)로 넘겨주는 명령 grep :  입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령 -n : 매칭된 라인을 출력할 때 파일 라인 번호를 함께 출력 함. -s : 에러 메시지를 출력하지 않음. --color=auto : 결과를 쉽게 구분할 수 있도록 컬러로 출력 함.  사용 예제) 게임에서 사용 되는  파일 위치와 이름 이 궁금할 경우, 키워드를 사용해서 검색 할 수 있음. 1. 게임이 설치된 폴더로 이동. 2. 검색 키워드 "마틸다" 로 검색. ( find . -name "*.*" | xargs grep -ns --color=auto "마틸다" ) 3. 파일 위치 및 이름과 "마틸다" 문자열이 파일의 몇 번째 라인에 위치하는지 확인. 

정규표현식 (Regular Expression)

  정규표현식이란? 특정한 규칙 을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어. 정규표현식은  정규문자 (문자 그대로의 의미),  메타문자 (특별한 의미), 또는 이들의 조합으로 구성 됨. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의  검색 과  치환 하는데 용이하다. 정규표현식 메타문자는 아래를 참고. 메타문자 설명 . new line (line feed) 를 제외한  1개의 임의의 문자 와 일치 함 ? 앞에 위치한 정규표현식 또는 문자가  0개 또는 1개 인 것과 일치 함. * 앞에 위치한 정규표현식 또는 문자가  0개 이상 반복 되는 것과 일치 함. + 앞에 위치한 정규표현식 또는 문자가  1개 이상 반복 되는 것과 일치 함. {n} 정확히 n번 일치 함. {n,} n번 또는 그 이상 일치 함. {n,m} 적어도 n번 일치하지만 m번을 넘지 않는다.  n <= 일치 횟수 < m ^ 문자열이나 행의 처음을 의미. $ 문자열이나 행의 끝을 의미. ( ) 여러 정규표현식을 하나로 묶을 수 있다. | 여러 정규표현식 또는 문자 중에서 하나를 선택 함. 문자 클래스 하나의 작은 일련의 문자열들을 더 큰 집합의 문자열들과 일치시키도록 함. 정규 표현식 작성에 유용 함. 대소문자가 구분에 유의. 브래킷 Vim ASCII 설명 [:lower:] \l [a-z] 알파벳 소문자 집합 [:upper:] \u [A-Z] 알파벳 대문자 집합 [:alpha:] \a [A-Za-z] 알파벳 문자 집합 [:digit:] \d [0-9] 숫자 집합 \D [^0-9] 숫자가 아닌 문자들의 집합 [:xdigit:] \x [A-Fa-f0-9] 16진수에서 사용할 수 있는 숫자 및 문자 집합 [:alnum:] [A-Za-z0-9] 알파벳 문자와 숫자 집합 [:word:] \w [A-Za-z0-9_] 알파벳 문자와 숫자에 "_" (밑줄 문자) 추가된 집합 \W [^A-Za-z0-9_] 알파벳,숫자,_(밑줄 문자) 를  제외 한 집합.

[Linux] make - 3

이미지
 이젠 Makefile 을 src 에 두지 않고 아래와 같이 따로 상위 폴더로 분리 해 보자 /* include/my_math.h */ int add ( int x, int y) ; int subtract ( int x, int y) ; int multiply ( int x, int y) ; int divide ( int x, int y) ; ​ /* src/main.c */ # include <stdio.h> # include <pthread.h> # include <my_math.h> void * thread_func ( void *data) { printf ( "[%s]\n" , __func__); printf ( "%d\n" , add( 10 , 5 )); printf ( "%d\n" , subtract( 10 , 5 )); printf ( "%d\n" , multiply( 10 , 5 )); printf ( "%d\n" , divide( 10 , 5 )); return 0 ; } int main ( void ) { pthread_t thread; pthread_create(&thread, 0 , thread_func, 0 ); pthread_join(thread, 0 ); return 0 ; } /* src/add.c */ # include <my_math.h> int add ( int x, int y) { return x + y; } //----------------------------------------------------------------------------------

[Linux] make - 2

이미지
 이전 예제에서는 소스파일과 헤더파일이 동일한 경로에 있었는데, 이번에는 c파일은 src 폴더에, h파일은 include 폴더에 나누어 위치 시키고 컴파일을 해 보자. 전체적인 구조는 다음과 같다. /* include/add.h */ int add ( int x, int y) ; /* src/add.c */ # include <add.h> int add ( int x, int y) { return x + y; } /* main.c */ # include <stdio.h> # include <add.h> int main ( void ) { int value = 0 ; value = add( 3 , 5 ); printf ( "%d\n" , value); return 0 ; } Make 파일은 src 디렉토리에 있고, 헤더파일은 include 디렉토리에 있으므로, -I../include 를 추가 해 주어야 한다. # src/Makefile CC = gcc CFLAGS = -I../ include -c TARGET = result OBJS = main.o add.o $(TARGET) : $(OBJS) $(CC) $(OBJS) -o $(TARGET) %.o: %.c $(CC) $(CFLAGS) $< clean: rm -rf $(OBJS) $(TARGET) 이번엔 스레드를 사용하는 예제를 살펴 보자. /* src/main.c */ # include <stdio.h> # include <pthread.h> void * thread_func ( void *data) { printf ( "%s\n" , __func__); } int main ( void ) {