qemuの制御キーバインド変更

検証環境を GNS3 から EVE-NG メインに使うようになってきているのですが、その中でひとつ不満が。それは「Ctrl-a(Ctrlキーを押しながらAキーを押す)」キーバインド。
bash シェルや Emacs キーバインドに慣れている人には伝わると思うのですが、行頭にカーソルを移動させたいときには「Ctrl-a」をよく使います。ところが、EVE-NG 上での Linux イメージや XRv-demo などは qemu による仮想環境で実行されるので、qemu の制御キーバインドである「Ctrl-a」として先に奪い取られて、本来受け付けてほしい「行頭にカーソルを移動」をするためには、2回「Ctrl-a」を押す必要があります。

「Ctrl-a」キーバインドは、Cisco IOS/IOS-XE/IOS-XR や Junos など多くのNOSのCLIでも使えるキーバインドで、私が多用するキーバインドのひとつです。そのため、これが2回必要だというのは非常にストレスフルです。なんとかできないかと思って探して、解決策が見つかりました。

-echr

設定をいろいろ調べてみたところ、qemu による仮想マシンの起動時オプションに「 -echr 」というものがあるのを見つけました(Escape CHaRacter かな)。

説明を見ても

Change the escape character used for switching to the monitor when using monitor and serial sharing. The default is 0x01 when using the -nographic option. 0x01 is equal to pressing Control-a.

とあり、デフォルトの「0x01(10進数の1)」が「A」を意味していると言っています。私が普段使わないキーバインドとして「Ctrl-t」があるので、これに変更するには…とおもったら続きに

For instance you could use the either of the following to change the escape character to Control-t.

-echr 0x14
-echr 20

と、私の設定したいキーバインドが例示されていました。早速やってみます。

多くの環境では、Ctrl-tは「前の文字との入れ替え」のキーバインドになっています。「Ctrl-t」を多用する場合の他に影響がないキーバインド候補としては「Ctrl-q」や「Ctrl-s」などがあります。

ノード単位の -echr 設定

ノードへの設定は、停止した状態で行います。

  1. 対象のノードを右クリックし、「Edit」をクリックする。
  2. 「QEMU custom options」の最後に「 -ehcr 20 」を追加して、「Save」をクリックする。
    ここに…
    追加して「Save」

これだけです。

使いたいキーバインドに合わせて「20」のところは変更してください。例えば、「Ctrl-z」にしたい場合は、アルファベット「Z」は26番目なので「26」を指定します。
なお、指定可能な範囲は「1(A)」から「26(Z)」までです。

テンプレートへの -echr 設定

ノードを作成するたびに設定するのが面倒な場合は、ノードのテンプレートに設定を入れてしまいましょう。テンプレートは、EVE-NGの /opt/unetlab/html/templates/intel 配下に YAML 形式で配置されているので、必要なファイルを書き換えます。例えば上記のように Linux ノード全てで有効にしたい場合は以下のような修正を行います。

root@eve-ng:~# cd /opt/unetlab/html/templates/intel/
root@eve-ng:/opt/unetlab/html/templates/intel# ls
a10.yml          cms.yml         freenas.yml             opnsense.yml     timosiom.yml     vpcs.yml
acs.yml          coeus.yml       hpvsr.yml               ostinato.yml     timos-ng.yml     vqfxpfe.yml
alteon.yml       cpsg.yml        huaweiar1k.yml          osx.yml          timos.yml        vqfxre.yml
ampcloud.yml     csr1000vng.yml  huaweine40.yml          paloalto.yml     titanium.yml     vsrx30.yml
android.yml      csr1000v.yml    huaweiusg6kv.yml        panorama.yml     trendmivtps.yml  vsrxng.yml
apicem.yml       ctxsdw.yml      infoblox.yml            pfsense.yml      uccx.yml         vsrx.yml
arubacx.yml      cucm.yml        iol.yml                 phoebe.yml       ucspe.yml        vtbond.yml
aruba.yml        cuc.yml         ise.yml                 prime.yml        utm.yml          vtedge.yml
asav.yml         cue.yml         isrv.yml                pulse.yml        vcenter.yml      vtmgmt.yml
asa.yml          cumulus.yml     jspacelogcollector.yml  riverbed.yml     veloedge.yml     vtsmart.yml
barracuda.yml    cup.yml         jspacepolicy.yml        scrutinizer.yml  velogw.yml       vwaas.yml
bigip.yml        cvp.yml         jspace.yml              silveredge.yml   veloorch.yml     vwlc.yml
brocadevadx.yml  cyberoam.yml    junipervrr.yml          silverorch.yml   veos.yml         vyos.yml
c1710.yml        dcnm.yml        kerio.yml               sonicsw.yml      versaana.yml     watchguard.yml
c3725.yml        dellos10.yml    linux.yml               sonicwall.yml    versadir.yml     winserver.yml
c7200.yml        docker.yml      macos_simple_kvm.yml    sophosutm.yml    versafvnf.yml    win.yml
c8000v.yml       esxi.yml        mikrotik.yml            sophosxg.yml     viosl2.yml       xrv9k.yml
c9800cl.yml      extremexos.yml  newimage.yml            stealth.yml      vios.yml         xrv.yml
cda.yml          firepower6.yml  nsvpx.yml               sterra.yml       vmxvcp.yml       *.yml
cexpresw.yml     firepower.yml   nsx.yml                 timoscpm-ng.yml  vmxvfp.yml
cips.yml         forescout.yml   nxosv9k.yml             timoscpm.yml     vmx.yml
clearpass.yml    fortinet.yml    olive.yml               timosiom-ng.yml  vnam.yml
root@eve-ng:/opt/unetlab/html/templates/intel# cp linux.yml  linux.yml.bak
root@eve-ng:/opt/unetlab/html/templates/intel# vi linux.yml
(ここで vi による編集を実施)
root@eve-ng:/opt/unetlab/html/templates/intel# diff -u linux.yml.bak linux.yml
--- linux.yml.bak	2021-02-09 10:48:45.312679116 +0900
+++ linux.yml	2021-02-09 10:48:59.072853182 +0900
@@ -37,5 +37,5 @@
 qemu_arch: x86_64
 qemu_version: 2.12.0
 qemu_nic: virtio-net-pci
-qemu_options: -machine type=pc,accel=kvm -vga virtio -usbdevice tablet -boot order=cd
+qemu_options: -machine type=pc,accel=kvm -vga virtio -usbdevice tablet -boot order=cd -echr 20
 ...

最後の diff の出力のとおり、 qemu_options の最後に -echr 20 を入れるだけです。これで、今後作成される Linux ノードではすべて「Ctrl-a」を2回押す必要がなくなりました!

その他 qemu で実行されるノードのテンプレートにも同様の設定を入れることで、キーバインドを変更することができます。困っている方はぜひ試してみてください。

コメント

タイトルとURLをコピーしました