setxkbmapをしてもたまに意図せず元に戻ってしまうときの対処法

setxkbmapでキーボードマップ(キーボード配列)を変更しても、ふとしたことで元に戻ってしまうことがある。
例えば、スリープ時。例えば、ターミナルを別ウィンドウに切り替えた時。などなど。
その対処法をここにまとめておく。

ta1se1.hatenablog.com

この記事のmyswapを

partial modifier_keys
xkb_symbols "swapkeys" {
};

にすることで、元に戻らなくなった。

 

キーボード配列 変更 キーボードマップ 設定 xkb (ubuntu)

特定のキーと特定のキーを交換させたい、
と思うことがたまにあるので、
その方法をまとめてみました。

# mkdir -p ~/.xkb/keymap ~/.xkb/symbols

# setxkbmap -print > ~/.xkb/keymap/mykbd
# vim ~/.xkb/symbols/myswap

以下をコピペ

partial modifier_keys
xkb_symbols "swapkeys" {
replace key <ESC> {[ A ] };
};

ここでの<ESC>をキーコード、Aをキーシンボルと呼ぶことにする

#vim ~/.xkb/keymap/mykbd

xkb_symbols { include "pc+us+inet(evdev)" };

xkb_symbols { include "pc+us+inet(evdev)+myswap(swapkeys)" };
に変更*us(dvorak)のようにusの後にかっこでくくってsetxbkmapの引数を書けばdvorak配列に固定される。

#vim ~/.bashrc

以下を追記

xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

# source ~/.bashrc

これで、ESCボタンを押すことで大文字のAが出力されるようになる
これから希望のキーボードマップにするために
myswapのreplaceの行を適宜変更していく

特定のキーコード、キーシンボルを特定する方法
#xev

適宜キーを押下
keycodeに書いてある数字と、keysymの右の右のキー名(かっこの右端の文字列)を控える
この数字がキーコード数値、キー名がキーシンボルである。
Ctrl+Cで終了xev終了

# cat /usr/share/X11/xkb/keycodes/evdev | grep [キーコード数値]

そのキーコード数値と一致するキーコードを控える(<と>で囲まれているもの)

# vim ~/.xkb/symbols/myswap

replaceの行のキーコードとキーシンボルを書き換える

(例)

partial modifier_keys
xkb_symbols "swapkeys" {
replace key <LFSH> {[ Caps_Lock ] };
 replace key <CAPS> {[ Shift_L ] };
};

こう書けば左SHIFTとCapsLockが交換される。

 

terminalのショートカットキー

カーソルの移動系
Ctrl + b : 後退
Ctrl + f : 前進
Ctrl + a : 行頭へ移動
Ctrl + e : 行末へ移動

削除系
Ctrl + h : BactSpace
Ctrl + d : Delete

切り取り、貼り付け
Ctrl + u : 行頭まで切り取り
Ctrl + k : 行末まで切り取り
Ctrl + y : 切り取った内容を挿入

履歴系
Ctrl + p : 一つ前のコマンド履歴
Ctrl + n : 一つ後のコマンド履歴
Ctrl + r : 履歴検索

履歴検索の操作
入力 : 入力した値を含む直近のコマンドを表示
Ctrl + r : 一つ前へ
Enter : 実行
Ctrl + g , Esc : コマンドラインへ戻る

usermod: user * is currently used by process * / Ubuntu usermod エラー

Ubuntuでusermod -l 新ユーザ名 旧ユーザ名 をしてユーザ名を変更しようとしたときに、usermod: user * is currently used by process * というエラーが出て変更できなかったので、その時の対処法を。

 

# adduser hoge

# gpasswd -a hoge sudo

# reboot

新しく作成したhogeユーザ(名前は何でもよい)でログインしなおす

$ sudo bash

# usermod -l 新ユーザ名 旧ユーザ名

ここでエラーが出る

usermod: user 旧ユーザ名 is currently used by process 1234(4桁のpid(不定))

# kill -3 1234

出てきたpidのプロセスをkillコマンドで止めてあげる

もう一度usermod

>usermod -l 新ユーザ名 旧ユーザ名

またエラーが出る

usermod: user 旧ユーザ名 is currently used by process 5678(4桁のpid(不定))

# kill -3 5678

再びkill、そして再びusermod

usermod -l 新ユーザ名 旧ユーザ名

またエラー。またkill。またusermod。またエラー。またkill。またusermod...を繰り返す。

成功したら、以下の記事を参考に変更するべきところを変更して終了。

 

ta1se1.hatenablog.com

 

Ubuntu ユーザ名 変更

# usermod -l 新ユーザー名 旧ユーザー名

(lはえるです)

usermod: user * is currently used by process *

というエラーが出てしまった場合は

 

ta1se1.hatenablog.com

 

 この記事を参考に対処してください。

無事usermodに成功した場合には、

ユーザ名変更に伴って変更すべきところがあるのでそこも変更しましょう。

# cd /home

# mv 旧ユーザ名/ 新ユーザ名/

# cp -a /etc/passwd /etc/passwd.bk

一応バックアップを作成しておく。

# vim /etc/passwd

旧ユーザ名のところを全て新ユーザ名に置換。

一番下を

新ユーザ名:x:1000:1000::/home/新ユーザ名:/bin/bash

にする(1000のところは不定(自由))

# cp -a /etc/group /etc/group.bk

一応バックアップを作成しておく。

# vim /etc/group

旧ユーザ名をすべて新ユーザ名に置換。

終了。