Ubuntu and Window Keyboard&Mouse sharing
Synergy는 두 컴퓨터를 인터넷망으로 연결하여 Input device를 공유하도록 하는 프로그램이다. 이 프로그램의 장점은 윈도우와 리눅스에서 동시에 사용 가능하다는 점이다. 즉 데스크탑 한대(리눅스)와 노트북(윈도우)를 한개의 Input device로 control이 가능하다. 즉, 윈도우로 사용 가능한 여유분의 노트북이 있다면 리눅스에 kakao talk을 설치하려고 삽질하는 노력을 하지 않아도 된다는 뜻이다.
현재 Synergy는 유료프로그램으로 전환 되었으나 1.4.18버전을 사용한다면(구버전) 무료로 사용 가능하다. 최신 무료버전을 다운받고 싶으면 여기의 포스팅을 참고한다. 참고로 뒤에 얘기하지만 포스팅을 쓰고 있는 현 시점에 Synergy 1.4.18버전은 한글입력 문제를 위한 패치를 1.4.10버전에 비해 구하기 쉽지 않다.
현재 구성되어 있는 시스템은 리눅스(서버), 윈도우(클라이언트)인데 접속은 잘 되지만 윈도우에서 한글이 안되는 문제가 발생한다. 이 문제는 서버의 문제가 아닌 클라이언트 쪽의 문제이다. 아무리 찾아도 1.4.18버전의 한글 패치 버전을 찾기 힘들다. 직접 빌드를 해도 되지만 한글 패치가 있는 버전으로 내려서 설치하였다. 찾아보니 1.4.10버전의 한글패치가 가장 많은 듯 하여 1.4.10버전으로 설치하고 패치까지 완료하니 정상작동된다. 한글패치 파일을 클라이언트쪽(윈도우)의 경로에 붙여넣어준다. 보통 C:\Program Files\Synergy 이다. 자세한 내용은 다음 포스팅을 참고한다. 이 글을 보는 분들을 위해 synergy 1.4.10 window(64bit), ubuntu(64bit), 그리고 한글 패치파일 총 3개 파일 첨부한다.리눅스 파일을 설치할 때 오류가 뜨는데 무시하고 설치하니 잘 동작한다. 여기에서 파일을 다운 받을 수 있다.
Ubuntu VPN server setting
VPN(Virtual Private Network)은 IP를 우회할 수 있는 방법중에 하나이며 다양한 방법으로 응용가능하다. 예를들면 학교의 인터넷 망에서 자유롭게 논문을 볼 수 있지만(학교에서는 IEEE등에 논문을 구독할 수 있도록 지불을 했기 때문에) 외부 망에서는 동일하게 논문검색을 할 수 없다(물론 VPN을 이용하지 않고 논문을 검색하는 방법이 있긴 하다). 이럴 때 학교내 학교망에 연결되어 있는 컴퓨터에 VPN 설정을 하고 외부에서 이 컴퓨터 VPN server로 연결하여 외부로 접속을 한면 외부에서는 학교망에서 접속한 것으로 인식하기 때문에 학교내에서 접속한 것과 같은 효과를 볼 수 있다. Ubuntu 14.04에서 VPN server를 설정하는 방법은 다음과 같다.
1. pptpd 설치
sudo apt-get install pptpd
2. /etc/pptpd.conf 파일 수정
/etc/pptpd.conf
파일을 다음과 같이 설정한다. 이 아이피는 본인의 IP와는 상관없이 설정한다.
localiip 10.0.01
remoteip 10.0.0.100-200
3. DNS 서버 추가
/etc/ppp/pptpd-options
에 다음을 추가한다.
ms-dns 8.8.8.8
ms-dns 8.8.4.4
4. IP forwarding을 활성화
sudo vim /etc/sysctl.conf
로 config 파일을 열고 다음을 활성화(uncomment) 시킨다(주석을 제거 하라는 의미).
5. 변경 저장
sudo sysctl -p /etc/sysctl.config
6. VPN user 등록
/etc/ppp/chap-secrets
을 열어 다음과 같이 user를 등록해 준다.
# Secrets for authentication using CHAP
# client server secret IP addresses
username pptpd password *
IP addresses에는 그냥 *를 입력한다.
7. 재 시작
service pptpd restart
를 입력하여 재 시작한다.
설정 상태는 ifconfig
를 입력하여 확인 할 수 있다.
8. iptable 변경
iptables-save > ~/iptables.save
를 입력하여 iptable을 백업한다. 그 다음으로 변경된 iptable을 기본 인터페이스로 사용하기 위해 다음을 입력한다(sudo로 입력해야 할 수도 있다.)
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface br0 -j ACCEPT
이 설정을 reboot 후에도 유지하기 위해서 다음을 입력한다.
sudo apt-get install iptables-persistent
9. 옵션 설정
VPN 연결을 위해 Ubuntu 14.04를 사용하고 있다면, PPTP Advanced Option에서 (use Point to point encryption)을 클릭해야 한다.
ssh 접속 시 비밀번호를 묻지 않도록 key를 생성하는 방법
1. ssh 접속 방법
기본적으로 ssh 접속하는 방법은 다음과 같다
ssh user@hostname.example.com
위의 명령어로 ssh 접속을 했을 경우 접속 시 마다 password를 물어보게 된다. 만약 .sh
스크립트를 작성해서 어떤 동작을 시키려고 하거나 매번 접속할 때마다 password를 입력하는 것이 번거로울 때 ssh key를 생성하여 등록해 놓으면 매번 입력할 필요가 없다.
2. ssh key 생성
ssh key를 생성하기 위해서는 다음의 명령어를 입력한다
명령을 입력 후 파일 명 및 몇가지 질문을 할 것인데 모두 디폴트로 설정하고 넘어가면 /home/username/.ssh/id_rsa
파일이 생성된다. 위의 파일을 열어보면 ssh의 key가 생성된 것을 확인할 수 있다.
3. ssh key copy
이렇게 생성된 ssh key를 ssh 서버에 복사해야 한다.
ssh-copy-id user@hostname.example.com
copy명령어를 입력하면 password를 물어볼 것인데, 이때 정확한 password를 입력하면 ssh key가 서버로 복사된다. 복사가 정상적으로 이루어 졌다면, 다음 접속부터는 비밀번호를 다시 물어보지 않을 것이다.
4. “Agent admitted failure to sign using the key” Error
만약 ssh key 등록 후 ssh 접속 시 Agent admitted failure to sign using the key
의 error가 발생하며 password를 물어볼 경우 ssh-add
명령어를 통해 ssh key를 ssh agent로 load 함으로써 고칠 수 있다.
공개 SW 라이센스(GPL, LGPL, BSD)
<본 포스팅은 다음을 참고하였습니다>
오픈소스를 사용하다보면 GPL, LGPL, BSD, MIT 등 다양한 라이센스가 있는데 이에 대해 알아두어야 할 것 같아서 정리합니다.
대부분의 라이센스는 [wiki](https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses
)에 표로 정리되어 있습니다.
이 사이트에는 조금 더 보기 편하게 정리되어 있습니다.
관련 링크
GLP/LGPL 전문은 읽어봐도 내용이 어려워서 무슨 말인지 알기가 쉽지 않네요. 하지만 KLDP 가이드를 보면 여러 오픈소스 SW 라이센스(GPL/LGPL/BSD 등)들이 잘 비교 정리되어 있습니다.
1. GNU GPL(General Public License)
GPL은 Free Software Foundation(FSF)에서 만든 Free 소프트웨어 라이센스로 1989년 1차 버전, 1991년 2차 버전, 2007년 3차 버전까지 발표되었습니다.
기본적으로 어떤 프로그램을 개발할 때, GPL 코드를 일부라도 사용하게 되면 그 프로그램은 GPL이 됩니다. GPL을 가진 프로그램을 유료로 판매하는 것은 가능하지만, 반드시 전체 소스코드는 무료로 공개해야 합니다.
GPL 코드를 사용한 SW를 내부적인(개인, 기관, 단체 등) 목적으로만 사용할 때에는 소스코드를 공개할 필요가 없지만 어떤 형태로든(유료든 무료든) 외부에 공표/배포할 때에는 전체 소스코드를 공개해야 합니다.
예를 들어, GPL 코드를 수정하거나 일부 사용하여 프로그램을 개발했습니다. 이제 개발된 프로그램을 개인적으로 혹은 기관, 단쳬 내부적으로만 사용하자고 하면 코드를 공개할 의무는 없으며 그냥 사용하면 됩니다. 그런데 이 프로그램을 외부에 공개하거나 판매하고자 할 경우에는 반드시 GPL 규정에 따라서 프로그램의 전체 소스코드를 무료로 공개해야 합니다.
전체 소스코드를 무료로 공개하면서 프로그램을 유료로 판매하는 것이 얼핏 이해가 안가지만, 개발자가 아닌 일반 소비자 입장에서는 충분히 구매할 수 있다고 생각됩니다. 그리고 기관 등에 프로그램을 판매할 때에는 단순한 소스코드가 아닌 시스템 구축, 관리, 유지보수 등 토탈 솔루션을 판매한다고 생각할 수 있습니다. 이러한 것들은 아무리 소스가 공개되어 있어도 비전문가가 하기 힘든 일이기 때문입니다.
그런데, 코드를 공개하면 다른 개발자가 이를 기반으로 좀더 개선된 버전의 제품을 개발하여 판매할 수도 있을 것입니다. 일견 억울할 수도 있겠네요..
GPL 관련하여 한가지 햇갈리기 쉬운 점이 있는데, 그건 자신이 개발한 SW에서 GPL 코드를 일부만 사용한 경우입니다.
GPL 전문에 보면, ‘만일 배포하고자 하는 프로그램의 특정 부분이 GPL 코드로부터 파생된 것이 아닌 독립적인 저작물일 경우에는 독립 저작물 모듈의 개별적인 배포에는 GPL이 적용되지 아니한다 (즉, 코드를 공개할 필요가 없다). 하지만 프로그램을 전체(GPL코드에서 파생된 모듈 + 독립 저작물 모듈)적으로 배포할 때에는 GLP을 따라야 한다.’ 고 되어 있습니다.
결론적으로, ‘GPL과 관련되지 아니한 부분만 독립적으로 팔거나 배포하는 경우는 관계가 없다. 하지만 GPL 코드를 일부라도 사용한 프로그램 전체를 배포할 때에는 GPL을 적용(즉, 프로그램의 전체 소스코드 공개)해야 한다’는 말이겠네요.. 상당히 강도가 세군요..
기타 세부적인 내용에 대해서는 GPL 전문과 GPL FAQ를 참조하시면 좋습니다. 특히 GPL FAQ를 읽어보면 GPL을 이해하는데 도움이 많이 됩니다.
GPL 전문에 있는 ‘보통의 소프트웨어 라이센스들이 SW에 대한 공유와 수정의 자유를 제한하려는 목적을 가진 반면에 GPL은 공유와 수정의 자유를 보장하기 위한 규정이다’라는 말이 꽤나 인상적이네요..
2. GNU LGPL(Lesser General Public License)
LGPL은 GPL보다는 훨씬 완화된(lesser) 조건의 공개 소프트웨어 라이센스입니다.
가장 큰 차이점은 LGPL 코드를 정적(static) 또는 동적(dynamic) 라이브러리로 사용한 프로그램을 개발하여 판매/배포할 경우에 프로그램의 소스코드를 공개하지 않아도 된다는 점입니다. LGPL 코드를 사용했음을 명시만 하면 됩니다.
단, LGPL 코드를 단순히 이용하는 것이 아니라 이를 수정한 또는 이로부터 파생된 라이브러리를 개발하여 배포하는 경우에는 전체 코드를 공개해야 합니다.
3. BSD (Berkeley Software Distribution) License
소스코드 공개의 의무가 없으며 상용(상업적) 소프트웨어에서도 무제한 사용 가능한 라이센스라고 하는데.. 그렇다면 아무런 제한이 없는 라이센스라는 의미겠네요.
참고로 OpenCV는 BSD 라이센스를 따릅니다. GPL 정신에는 맞지 않겠지만 쓰는 사람 입장에서는 정말 편하네요..
4. MIT License
MIT license는 copyright와 license에 대한 정보만 표기하면 자유롭게 사용할 수 있는 라이센스인데, 상업적인사용, 배포, 수정 및 개인적인 사용이 모두 가능합니다. BSD와 MIT는 매우 유사한 조건이라고 볼 수 있을 것 같습니다.
GNU
문득 GNU는 무엇의 약자일까? 하는 궁금증이 생겨서 같이 찾아보았습니다.
“GNU’s Not Unix”의 약자라는군요. gnu는 unix가 아니다..
이런 것을 재귀약자라고 한다네요.
참고로 아프리카 영양중에 gnu(누~ 라고 발음)라는 것이 있는데, 이것과 구분하여 GNU는 ‘그누~’라고 발음한답니다. 그리고 GNU 홈페이지에 가보면 이 영양 머리모양을 마크로 하고 있음을 알 수 있습니다.
이미지 확장자에 대해 설명
오디오 컨테이너가 가장 기술적으로 잘 알려진 컨테이너라 하면 이미지 컨테이너는 가장 많이 사용되고 있는 컨테이너일 것이다. 윈도로 대표되는 GUI(Graphic User Interface) 기반의 OS와 웹브라우저 기반 인터넷이 대중화하고 보급되면서 인류의 디지털 라이프는 온갖 종류의 이미지로 채워지게 되었기 때문이다. 이처럼 우리의 생활과 매우 밀접한 존재이기 때문에 단순 소비를 위한 편의성에서는 오디오 컨테이너와 마찬가지로 거의 신경 쓸 필요 없이 일반적으로 사용되는 시스템에서 그대로 사용하면 된다. 하지만 오디오 컨테이너에 비해 사용되는 종류가 압도적으로 다양하며 당연히 이로 인해 호환성이 조금은 떨어지는 것은 사실이다.
동영상은 비슷한 정지 이미지의 연속이라는 점에서 이미지와 무관할 수 없으며 제한적이나마 이미지 시퀀스란 형태로 서로 호환되기도 하기 때문에 동영상 작업을 하는 작업자라도 정지 이미지에 대해 기본적인 내용은 숙지할 필요가 있다.
비트맵 이미지와 벡터 이미지
비트맵 이미지(bitmap image)는 전체 그림을 구성하는 픽셀 데이터의 배열을 통해 이미지를 형성 및 저장하는 방식으로, 대부분의 디지털 이미지가 사용하는 방식이다. 하지만 본래 규정된 크기 이상으로 확대하면 곡선과 대각선에서 앨리아싱(aliasing)이라 불리는 계단 현상이 일어날 수 있다. 반면 벡터 이미지(vector image)는 기준점에서 수학적인 벡터 좌표법으로 이미지를 형성 및 저장하는 방식으로, 수학적 계산에 근거한 상대좌표 데이터이기 때문에 확대 및 축소를 해도 이미지가 깨지는 현상이 없다. 하지만 이러한 특징 때문에 실사 사진에는 적합하지 못하다.
1. AI
가장 대표적인 벡터 드로잉 소프트웨어인 어도비 일러스트레이터(Adobe Illustrator)에서 사용하는 벡터 이미지를 저장하기 위한 파일 컨테이너로 ‘어도비 일러스트레이터’의 머리글자다. 대다수의 이미지 파일 컨테이너가 비트맵 방식인 것에 비해 상대적으로 그 사용량이 적은 벡터 방식이기 때문에 지원하는 하드웨어와 소프트웨어 역시 상대적으로 적다.
2. BMP
마이크로소프트에서 개발한 무손실 비트맵(bitmap) 이미지 파일 컨테이너로 윈도 시스템에서 주로 사용된다. 주로 반복 문자열 제거라는 압축 기법을 이용한 무손실 압축 상태로 사용되기 때문에 압축 효율은 그리 높지 못하다. 당연히 이미지 크기에 비해 용량이 매우 큰 편이라는 단점이 있지만 반대로 호환성은 매우 높다.
3. GIF
1987년 컴퓨서브(CompuServe)에서 발표한 무손실 압축, 인덱스 컬러 기반의 비트맵 이미지 파일 컨테이너로 그래픽스 인터체인지 포맷(Graphics Interchange Format)의 줄임말이다. 지원 가능한 색상이 최대 256색으로 제한되기 때문에 사진과 같이 색상이 많은 이미지가 원 소스인 경우 색상 부분에서 심각한 손실이 발생할 수 있기 때문에 권장하지 않는다. ‘애니메이션 GIF(Animation GIF)’로 만들면 동영상으로도 만들 수 있지만 오디오는 지원하지 않는다. GIF89a 형식은 단색 알파채널(alpha channel)을 지원하기 때문에 투명 배경을 지원한다.
4. JPG, JPEG, JPE, JFIF
합동사진전문가단체(JPEG, Joint Photographic Exports Group)에서 지정한 정지화상을 위한 표준으로 용량대비 화질이 뛰어나다. 현재 가장 많은 분야에서 가장 많이 사용되고 있는 손실 압축 기반의 비트맵 이미지 파일 컨테이너로 RGB 신호를 그대로 사용하지 않고 비디오에서 많이 사용하는 YCbCr 방식으로 변환해 처리하는 것이 특징이다. 하지만 이러한 특성 때문에 화질 설정을 최대치로 설정해도 RGB와 YCbCr를 오가며 변환하는 과정에서 미미하지만 이미지 손상이 발생하며 수정을 반복하면 할수록 화질 손상이 증폭된다는 단점이 있기 때문에 작업용으로 사용할 때는 주의해야만 한다.
5. JP2, J2C
JPEG보다 화질과 압축률을 모두 향상시키는 것은 물론 JPEG에서 불가능했던 무손실 압축도 지원하는 개량형인 JPEG2000이 사용하는 파일 컨테이너지로 웨이블릿 변환이란 기술을 사용한다. 기술적으로는 많은 발전을 이루었으나 지원하는 장비와 소프트웨어는 적은 상황이다.
6. PCX
제트소프트(Zsoft)에서 개발한 무손실 압축 비트맵 이미지 파일 컨테이너로 도스(DOS) 기반의 페인트브러시(Paint Brush)라는 비트맵 이미지 제작 소프트웨어에서 작업한 이미지를 저장하기 위해 만들어졌다. PCX(Personal Computer eXchange)는 주로 인덱스 컬러 모드로 사용되지만 트루 컬러 모드도 지원한다. 도스와 윈도 95가 주로 사용되던 무렵까지 높은 호환성을 바탕으로 많이 사용되었으나 인터넷이 대중화되는 시점을 기준으로 뒤 이어 나온 GIF와 JPEG, PNG에 밀려 지금은 거의 사용되지 않는다.
7. PNG
PNG(Portable Network Graphics)는 W3C(World Wide Web Consortium)에서 GIF의 법적인 문제와 단점을 극복하기 개발된 무손실 압축 비트맵 이미지 파일 컨테이너로 트루 컬러와 8비트 알파채널을 지원하면서 대부분 GIF보다 좋은 압축률을 보여 준다. 하지만 GIF처럼 애니메이션은 지원하지 않는다. 무손실 압축을 사용하기 때문에 JPEG보다는 압축 효율이 나쁘기 때문에 일반적으로 더 큰 용량을 갖게 된다.
8. PSD
어도비 포토샵(Adobe Photoshop)에서 사용하는 비트맵 이미지 파일 컨테이너로 ‘포토샵 도큐멘트(photoshop document)’의 줄임말이다. 마스크(mask), 레이어(layer)와 알파채널 등 이미지 파일로서는 매우 다양한 기능들을 지원하면서 무손실 압축을 사용한다. 대신 그만큼 용량이 크기 때문에 최종본이 아닌 작업이 진행되고 있는 데이터의 저장용으로 주로 사용한다.
9. TGA, TAGA
트루비전(Truevision)에서 개발한 무손실 압축 기반의 비트맵 이미지 파일 컨테이너로 알파채널도 지원해 자막파일과 동영상 프레임을 각각의 연속된 이미지 파일로 만들어 사용하는 이미지 시퀀스에서 많이 사용된다.
TGA로 이뤄진 이미지 시퀀스(image sequence)를 ‘타가 시퀀스’라고 부른다. 타가(TARGA)는 ‘트루비전 어드밴스드 래스터 그래픽스 어댑터(Truevision advanced raster graphics adapter)’의 줄임말이다. 압축률은 그리 좋지 못해서 저장용량을 많이 차지하지만 맥, 윈도, 리눅스는 물론 매우 다양한 OS에서 사용할 수 있기 때문에 거의 모든 컴퓨터 기반의 영상 장비에서 지원한다는 장점이 있다.
10. TIF
앨더스(Aldus)와 마이크로소프트가 스캐너용으로 공동 개발한 비트맵 이미지 파일 컨테이너로 ‘태그드 이미지 파일 포맷(Tagged Image File Format)’의 줄임말이다. 무압축은 물론 다양한 압축률을 선택할 수 있으나 압축 방식을 사용하면 구형 이미지 뷰어에서 정상적으로 인식되지 않는 경우도 있기 때문에 사용에 주의가 필요하다. 포토샵의 PSD처럼 레이어도 지원한다. 등장 시기는 PCX와 비슷하지만 아직까지도 꾸준히 사용되고 있는 규격이다.