기본 콘텐츠로 건너뛰기

추천 가젯

Tmux 환경에서 Vim 컴파일 시 발생하는 termio/termios 감지 오류 해결 방법

 리눅스 환경에서 소스코드를 직접 빌드하다 보면 의외의 환경 변수나 터미널 세션 설정 때문에 엉뚱한 빌드 에러를 마주할 때가 있습니다. 대표적인 예로 Tmux 세션 내부에서 Vim 소스를 컴파일할 때 발생하는 termio/termios 감지 오류 가 있습니다. 이번 글에서는 해당 에러가 발생하는 원인과, 단순한 clean 으로는 해결되지 않는 이유 및 올바른 해결 방법을 정리합니다. 1. 문제 원인 Vim의 소스 코드 빌드 과정( configure )은 시스템이 System V 계열인지 Linux 계열인지 판별하기 위해 termio.h 와 termios.h 헤더 파일 및 터미널 인터페이스를 검사(Probe)합니다. 하지만 Tmux 내부(세션 안)에서 컴파일을 진행할 경우 , Tmux가 제공하는 PTY(Pseudo-Terminal) 환경과 TERM=screen 등의 특수한 환경 변수 영향으로 인해 Autoconf가 터미널 인터페이스를 검출하는 과정에서 오동작을 일으킵니다. 그 결과, 실제 시스템 조건과 무관하게 설정 에러를 발생시키게 됩니다. 2. 왜 make clean 으로는 해결되지 않을까? 일반적인 개발 과정에서는 빌드가 꼬였을 때 make clean 을 실행하곤 합니다. 하지만 make clean 은 컴파일된 오브젝트 파일이나 바이너리( .o 파일 등)만 삭제할 뿐, Autotools가 시스템 환경을 탐색한 결과로 남긴 캐시( config.cache 또는 내부 매크로 변수)나 설정 파일들은 그대로 유지 합니다. 일반적인 상황에서는 시스템의 하드웨어/OS 정보가 바뀌지 않기 때문에 이 잔여물이 문제가 되지 않습니다. 그러나 Tmux나 Screen 같은 터미널 멀티플렉서 환경에서 탐색된 왜곡된 정보가 캐시에 박혀버리면, 나중에 Tmux 외부(일반 터미널)로 나와서 빌드를 시도해도 이전의 오염된 캐시 때문에 계속해서 오류가 발생하게 됩니다. 3. 해결 방법 이 문제를 해결하기 위해서는 반드시 Tmux 외부 환경 에서 기존의 오염된 설정 파일을 ...

X-touch mini relative{1,2,3} 모드와 ardour general midi map 맞추기.

 일단 마키모드의 Pot1..8 기능이 정말 훌륭한 기능이긴하다만, Ardour에서 에러가 너무나며, 

Bank Next 버튼 등이 없다. 고로 잘 세팅이 되도 8채널만 쓴다고 생각해야 할 것이다. 


결국은 General midi로 변화를 주어야 할텐데, x-touch editor에서는 mackie모드 같은 느낌의 

상대적 변화 모드 세팅이 총 relative1, relative2, relative3으로 세가지가 있어서, 어떤게 맥키 모드인지 알 수가 없다. Ardour는 자체적으로 enc-r, enc-l, enc-2, enc-b 모드로 4가지의 상대적 인코더 변화 모드를 지원한다. 

이 3x4의 경우의 수 중에 서로 맞는게 하나는 있을거라, 지원을 해주는 것일 테니, 일일이 테스트를 해보는 수밖에 없을 것이다. 해보자. 


Ardour는 4가지의 모드를 말로 그리고 예제로 설명하므로 X-touch를 실험해보자.


먼저 인코더1은 relative1로 인코더2는 2로 인코더3은 3으로 설정한 후 확인할 수 있다. 


인코더 1은 오른쪽으로 돌릴 때,  01(속도에따라 02,03으로 올라감) 왼쪽으로 돌릴 때, 7f가 나온다. 7bit 2의 보수 방식이다. 7f(16) --> 1111111 -> - (~(111111) +1)  ->  -1(16)

인코더 2는 우로 41, 좌로 3f가 나온다. 0x40 즉 64를 기준으로 작동하는 방식이다. 

인코더 3은 우로 돌릴 때, 1 좌로 돌릴 때 41이 나온다. 64보다 크면 - 부호가 붙는 방식이다. 7번째 비트가 부호를 말하며, 보수는 사용치 않는다. 


이 3개의 인코더에 해당하는 모드를 Ardour의 설명으로 찾으면 다음과 같다. 

Ardour의 enc-r은 0svvvvvv 부호비트가 있으면 positive라고 한다. 

Ardour의 enc-l도 0svvvvvv  이며 부호 비트가 없으면 positive라고 한다.  이 것이 맥키 프로토콜이 사용하는 방식이다. relative3(Mackie)라고만 배링거가 써줬으면 얼마나 좋았을까...

이건 시간이 나면, binary에서 relative3을 찾아 mackie로 바꾸면 쉽게 이해할 수 있겠다. 

enc-l    = relative3 이며, enc-r ~= relative3  도 유사하다


Ardour의 enc-2는 이름부터 2의 보수 느낌이 난다. 0-64는 양수이며, 그 이상은 7비트 부호 숫자 기준으로 2의 보수를 취한다. 

enc-2    = relative1 이다.

Ardour의 enc-b는 Relative Binary Offset으로 64를 기준으로 차이값을 말한다. 

enc-b   = relative2 이다.

<Binding channel="2"  ctl="17"                   uri="/route/pan       B2"/> 이런 식으로 써진, midi map을 변환할 수 있다. 

ctl을 enc-l로 바꾼다.  X-touch editor를 사용해, 기본 셋팅 파일을 불러온 후, Encoder의 Minimum을 눌러, relative3으로 바꾼다. 

X-touch mini로 덤프를 하고, 해당 설정 파일을 LayerA_enc-l LayerB enc-r이라는 이름으로 저장해, 헛갈릴 일이 없도록 준비를 하자. 

그 후로는 다양한 일을 할 수 있다. 



댓글