B / Y / U / S
HOME 웹 호스팅 도메인 매뉴얼 고객지원 설정정보 계정신청 2025-04-07 Monday 
웹 호스팅
# 공지 사항
# 자주 묻는 질문
# 질문과 답변
# 가입 문의
커뮤니티
# 자유게시판
# 리눅스팁
# 아이큐 테스트
# 내홈 소개
# 겔러리
# 자료실

  리눅스팁  Go Unix Power Tools Online Book Go Bash Guide
Read No. 39 article 2001-08-20 06:02:51
NickName   풀비누
Subject   키보드자판 모조리 사용하기.(한영키,한자,윈도우키 등)
글쓴이: 단n키

/* 쓸데없는소리
 *
 * 이 글은 이미 여러번 올라왔던 글입니다.
 * 제가 다시 쓰고자 하는 이유는 대부분의 설명이 너무 105, 106키 
 * 자판에맞춰져 있기 때문에 보다 일반적인 글이 필요하다는 
 * 생각때문이었습니다. 
 * 저는 왜 아직까지 많은 배포판에서 키보드맵의 지역화를 배제하는지
 * 이해할 수가 없습니다.
 * 맨드레이크는 어느정도 배려했고, 미지도 예전버전에서 이것을
 * 잘 배려했습니다.(요즘은 사용하지 않기때문에 모르겠습니다.)
 * 이런 배려를 가장 잘한 배포판은 제가 써본 것 중엔 
 * 데비안이었습니다. ;-)
 * 
 *  이 글은 다소 길게 작성되었지만 
 *  한 번 해보시면 금방 아시게 될 겁니다.
 *
*/

* 어떤 과정을 거치는지 간략한 소개

$ : xev(이벤트 테스터 플그램)를 통해 자기가 사용하고자 하는
   키코드(keycode)값을 알아낸다.
$ : xmodmap을 실행시켜 keycode값과 key system name을 연결한다.
$ : xev를 계속 실행시키면서 오류는 없는지, 키값과 키이름이 잘 연결
   됐는지 확인한다.
$ : /etc/X11/Xmodmap파일이나 ~/.Xmodmap파일에 변경사항을 적는다.
$ : X를 다시띄운다.
$ : 자신이 사용하는 윈도우매니져에서 원하는 키를 키바인딩한다.

  # 노트북사용자가 알아야할 일반적인 사항 (아닌 분들은 통과)
  # 노트북에서는 키 개수를 줄이는 과정에서 특별한 경우를 갖습니다.
  # 한/영키가 실제로는 "오른쪽 알트(Alt_R)"키와 같습니다.
  # 한자키 역시 실제로는 "오른쪽 컨트롤(Ctrl_R)"키와 같습니다.
  # 기타 인터넷키나 다른 키는 언급하지 않았습니다.

* 그럼 이제부터 같이.. 

// ====================================================
//   * xev와 xmodmap의 사용
// ====================================================
우선 터미널을 하나 띄우셔서 
xev를 실행시킵니다.
$ xev 그러면 이상한 창이 하나 뜨죠?
창제목에는 "Event Tester"라는 글씨가 씌여있구요.
마우스를 움직일 때마다 터미널에는 분주히 이상한 숫자들이
오가구요

Event란 말은 프로그래밍을 하시는 분이라면 쉽게 눈치채셨겠죠?
자세히 보시면 마우스의 움직임을 감지함을 알 수 있습니다.
이번엔 "a"를 누릅니다. 다시 뗍니다.
그러면 두번의 이벤트가 감지됨을 알 수 있습니다
자세히는 알 수 없지만 키 한 개의 신호를 받기 위해서는 
눌렀다가(한 번) 떼내는(또 한 번)과정이 필요한 것 같습니다.

그러면 문제의 한영키나 한자키를 눌러볼까요?
그러면 분명 뭔가 이벤트는 일어나는 듯 싶지만
"a"를 눌렀을 때와 다른 점이 있습니다.
state 0x0, keycode 122 (keysym 0x0, NoSymbol), same_screen 

한영키를 눌렀지만 NoSymbol이라는 문구가 보이시죠?
즉... 기계적으로는 그 키값(122)가 있지만 현재 리눅스박스에서
그걸 인식할 이름이 없는 것입니다. 있으나마나한 키가 되는 것이죠.
이 문제는 특히 "아미"입력기에서 나타나죠.
윈도우에 익숙하신분들이 가장 애를 먹는게 아마 한/영키를 이용한
한영 전환이 안되는 것이죠.
다음을 실행해 봅니다.

$ xmodmap -e "keycode 122 = Hangul"
$

그런 다음 다시 xev로 돌아가서 한/영키를 다시 누릅니다.
아미에서도 적용되는지 확인해 봅니다.(한텀은 보장못합니다.)

제대로 연결이 된 것이 확인이 되셨으면 다른 키도 비슷한 방식을
따릅니다.


단 주의하실것이 "Hangul"과 같이 키이름을 사용하실려면
이미 예약 되어있는 이름을 사용하셔야 합니다. 
만일 다음과 같은 경우
$ xmodmap -e "keycode 115 = windog"
xmodmap:  commandline:0:  bad keysym name 'Windog' in keysym list
xmodmap:  1 error encountered, aborting.
$

위와 같이 에러를 나타냅니다.

대개 많은 시스템에서...

윈도우키 ---> Hyper_L Hyper_R
메뉴키   ---> Menu 혹은 Super_R

등으로 사용합니다. 절대, 절대적인 것이 아니므로 컴퓨터가 인식하는
이름이면 언제든지, 무엇이든지 사용가능합니다.

여하튼 위와 같이 xmodmap과 xev로 keycode와 keysystem name을
연결시켜가면서 제대로 연결이 되고 있는지 확인합니다.

// ====================================================
//   * X설정 파일(Xmodmap)파일에 저장.
// ====================================================

이제 변경된 사항을 X가 뜰 때마다 적용하도록 합니다.
/etc/X11/Xmodmap에 써서 전체적설정(global setting)을 하셔도 되고
~/.Xmodmap을 만들어서 지역설정을 하셔도 좋습니다.

후자의 경우를 중심으로 설명하겠습니다.
xmodmap을 실행했던 파일을 닫습니다.
다시 터미널을 띄웁니다.(히스토리를 이용하기 위해서)
$ grep xmodmap ~/.bash_history | grep keycode
xmodmap -e "keycode 122 = Hangul"
xmodmap -e "keycode 121 = Hangul_Hanja"
xmodmap -e "keycode 115 = Windog"
xmodmap -e "keycode 115 = Hyper_L"
xmodmap -e "keycode 116 = Hyper_R"
xmodmap -e "keycode 117 = Menu"
$ !! | sed -e "s/\(xmodmap -e.\"\) *\(.*\) *\"/\2/g"
keycode 122 = Hangul
keycode 121 = Hangul_Hanja
keycode 115 = Windog
keycode 115 = Hyper_L
keycode 116 = Hyper_R
keycode 117 = Menu
$ !! > ~/.Xmodmap # 설정 내용을 저장합니다.

이렇게 하신다음에 .Xmodmap파일을 열어서 중복된 부분을 빼거나
잘못된 부분을 고치시면 됩니다.
정규식표현이 어려우시면 직접 위와 같은 형태로 편집하셔도 됩니다.


전역설정을 원하시면...
위의 파일을...
# cat ~somebody/.Xmodmap >> /etc/X11/Xmodmap
# 

위와 같이 하시면 됩니다.

이제 X를 다시 띄우시고 바뀐 설정이 제대로 됐는지
확인하시면 됩니다. 

자신이 원하는 윈도우 매니저의 키바인딩에 사용하실 수 있습니다.

#### 끝 (이하 별로 중요하지 않은 내용) ###########



더욱 자세한 사항을 원하시면 역쉬 man xmodmap하셔야 겠지요 ;-)

keysym이나 add명령도 적절히 사용하면 괜찮습니다.

add Mod2 = Hyper_L

이렇게 하시면 Mod2라는 이름으로 Hyper_L키를 대신 할 수 있죠.

보너스...(일까?) 저의 .bbkeysrc파일

KeyToGrab(Right),WithModifier(Control+Mod1),WithAction(NextWorkspace)
KeyToGrab(Left),WithModifier(Control+Mod1),WithAction(PrevWorkspace)
KeyToGrab(1),WithModifier(Control),WithAction(ExecCommand),DoThis(hanterm)
KeyToGrab(Tab), WithModifier(Mod1), WithAction(NextWindow)
KeyToGrab(F4), WithModifier(Mod1), WithAction(Close)
KeyToGrab(Hyper_R),WithModifier(Shift),WithAction(ExecCommand),DoThis(mozilla)
KeyToGrab(bracketright),WithModifier(Mod1),WithAction(MaximizeWindow)
KeyToGrab(Right),WithModifier(Control),WithAction(MaximizeHorizontal)
KeyToGrab(Up), WithModifier(Control), WithAction(ShadeWindow)
KeyToGrab(Down),WithModifier(Control),WithAction(MaximizeVertical)
KeyToGrab(Up), WithModifier(Mod2), WithAction(BigNudgeUp)
KeyToGrab(Down), WithModifier(Mod2), WithAction(BigNudgeDown)
KeyToGrab(Right), WithModifier(Mod2),WithAction(BigNudgeRight)
KeyToGrab(Left), WithModifier(Mod2), WithAction(BigNudgeLeft)

노트북에서 사용중인 bbkeysrc입니다.
Hyper_R은 인터넷키에 물려 사용하고 있고, 
Mod2는 실제로는 Hyper_L키(윈도우키)입니다.

그럼 이만...

--
난데없이 휴학안된다고 하면 어떻하지 ㅡㅡ;;;;
Regist Addr [ 210.221.19.151 ] 목록보기 윗글 아랫글
정규표현식 [ 상세 검색 ]
Page Loading [ 0.03 Sec ] SQL Time [ 0 Sec ]

Copyleft 1999-2025 by JSBoard Open Project
Theme Designed by IDOO And follow GPL2

개인정보 취급방침 이용 약관 사이트 맵 어드민 관리