スキップしてメイン コンテンツに移動

投稿

x11 でノートパソコンの2ボタントラックパッドの右ボタンと中ボタンエミュレーションを入れ替える

x11でのコピペは、ホイール付きのマウスを使っている場合、左ボタンで選択するだけでコピーとなり、ホイールボタンが中ボタンとして機能するのでホイールボタンをクリックすればペースト(貼り付け)できるので問題はないのですが、ノートパソコンの場合だと中ボタンのないものがあります。この場合、左右のボタンを同時に押し下げると中ボタンのエミュレーションになり、ペースト(貼り付け)できるのですが、これがかなり面倒で、windows ターミナルのように左ボタン選択でコピー、右ボタンで貼り付けできないかなと思い調べたところ、xmodmap (x11-xserver-utils パッケージに収録) で物理ボタンのボタンコード番号を入れ替えることができるとのことだったので、早速やってみました。 apt-get install x11-xserver-utils # 右ボタンと中ボタン(エミュレーション)を入れ替える xmodmap -e 'pointer = 1 3 2 4 5 6 7 8 9 10' # 確認 xmodmap -pp 筆者の場合、メインの端末は Debian + mint wm でホイール付きのマウスを使っていて、サブ端末のwindowsノートパソコンは2ボタントラックパッドで、メイン端末にssh経由でx11をフォワードしているのですが、一々コマンドをたたくのは面倒なので、~/.bashrcに以下のような記述を追加し試したところ上手くいきました。 if [ -n "$SSH_CONNECTION" ]; then export DISPLAY=`echo $SSH_CONNECTION | awk '{print $1}'`:0.0  if xhost >& /dev/null; then xmodmap -e 'pointer = 1 3 2 4 5 6 7 8 9 10' fi fi ちなみに、VcXsrvの場合、フォワードされたX11アプリでコピーしたテキストは、windowターミナルにペーストできました。その逆は、windows terminal の設定を以下のように変更することで、windows terminal から フォワードされたX11アプリにペース...
最近の投稿

ssh x11 フォワード して Windows 上の VcXsrv で uim mozc を使う

今使っている GUIはDebianのmintデスクトップなのですが、imがibusではなくuimになっていました。なので以前投稿したibusのスクリプトはそのままでは当然使えないのでスクリプトを書き換えることで Windows上のVcXsrv で日本語入力できたので備忘録として挙げてみることにしました。 設定ですが、まずフォワード元のsshdのx11forwardを確認します。 # /etc/ssh/sshd_config X11Forwarding yes 有効になっていなければ変更してsshdを再起動してください。 つづいてフォワード元の.bashrcに以下のようにして処理を追加します。 cat >> ~/.bashrc <<EOF if [ -n "$SSH_CONNECTION" ]; then export DISPLAY=`echo $SSH_CONNECTION | awk '{print $1}'`:0.0 export GTK_IM_MODULE=uim export XMODIFIERS=@im=uim export QT_IM_MODULE=uim export NO_AT_BRIDGE=1 if xhost >& /dev/null; then xset -r 49 if test `ps auxw | grep $USER | grep -v grep | grep "uim-xim" 2> /dev/null | wc -l` -ge 1; then for pid in $(ps auxw | grep $USER | grep -v grep | grep "uim-xim" 2> /dev/null | awk '{print $2}');do disp=$(cat /proc/${pid}/environ --show-nonprinting | sed 's,\^@,\n,g' | grep DISPLAY) if [ "$disp" = "$D...

kvm の virbr で public な IPv6 アドレスを使う

今回も表題の通りなのですが、下述する ndppd を使わない場合、前提条件があります。それは、ルータが kvmホスト下の IPv6 ネットワークへのルートを保持できることです。具体的には、IPv6 でスタティックルートを設定できること、 もしくは ルータが ripng などを喋り、kvm ホストが virbr0 下のネットワークを広報するなどです。また、ndpproxy (ndppd) を使う方法もあります。ndppdを使う場合は下述のように ndppd の設定だけで外部と接続できますので、IPv6 Router上での lan側インターフェースのアドレスを固定にしてスタティックルートを設定する必要もなく、また、kvm host の lan側アドレスを固定にする必要もなくなり設定としては一番簡単ですが、今回は動作について最も解りやすいスタティックルートの例で説明したいと思います。 まずはじめに、ネットワークの構成についてです。パブリックな IPv6 が使用できる環境ではルータ以下の端末に一般的には /64のアドレスが割り当てられているとおもいますが、/64のサブネットを別に用意することは通常はできませんので、/64 以上の小さなサブネットを用意します。今回は /80 を例にしてみました。図にすると以下のようになります。 IPv6-Internet | | IPv6 Router( lan eno2: 2001:db8:1:a::1/64 ) | | IPv6 kvm host(lan eno1: 2001:db8:1:a::117/64) | | virbr0 (2001:db8:1:a:117::1/80) | | kvm guest (2001:db8:1:a:117::xxxx/80 by dhcp6) この図だと IPv6 Router 上に virbr0 の 80 のサブネット (2001:db8:1:a:117::/80) へのルートを kvm host のアドレス (2001:db8:1:a::117/64) にする必要があります 。(厳密にはサブネットを予約するには、IPv6 Router が radvd で端末にアドレスを取得させるのではなく、dhcp6 でアドレスを配布させる必要がありますが、小規模な環境...

bash のヒアドキュメントで $ を展開させない方法

シェルスクリプトのパッチを作成する場合、diff では何もしなくても$は展開されないので問題はないのですが、diffで作成されたパッチ文をヒアドキュメントでファイルに落とす場合、$が展開されるので、エスケープ処理しない限り、一々コピペするしかないと思い込んでいました。 ですが、ふと"ヒアドキュメント $ そのままで"と検索したところ、cat > test.patch <<'EOF'と EOF をシングルクォート(')で括れば良いとのことでした。 早速試した所、$が確かに展開されず、パッチフィルとして機能しました。 cat > scs_cert_generator.sh.patch <<'EOF' --- scs_cert_generator.sh.orig 2024-07-10 22:03:58.000000000 +0900 +++ scs_cert_generator.sh 2025-05-23 16:26:34.516324152 +0900 @@ -628,8 +628,8 @@ print_msg "Create self-signed Remote Connector certificate." - _GENERATED_CERTIFICATE=$(openssl x509 -req -in <(echo "$_GENERATED_CSR") -sha256 -extfile "$SCS_OPENSSL_CONFIG_FILE" \ - -extensions v3_ca -signkey <(echo "$_PRIVATE_KEY") -out >(cat) -days ${SCS_OPENSSL_DAYS} 2>/dev/null) + _GENERATED_CERTIFICATE=$(openssl x509 -req -sha256 -days ${SCS_OPENSSL_DAYS} -in <(echo "$_GENERATED_CSR") \ + -sign...

既存の disk image をつかって kvm ゲストを virt-insall --import で復旧する

何らかの理由で kvm ゲストが立ち上がらない場合やマイグレーション機能をつかわずに kvm ゲストを移動させたいこともあると思います。 今回、Debian 12を Debian 13 にアップグレードしたところ、kvm ゲストが立ち上がらない状況に遭遇したのですが、一旦 destroy して disk image をバックアップし、guest を undefine --nvram として未定義の状態にしてから virsh-install --import で xml を再生成したところ、復旧できたのでメモ代わりに挙げておくことにしました。 具体的なコマンドは以下の通りです。 virt-install \ --virt-type kvm \ --name kvm92a \ --vcpus=8 \ --memory 4096 \ --disk /srv/images/kvm92a.img \ --import \ --graphics none \ --network=bridge:virbr0 \ --arch=x86_64 --os-variant=almalinux9 \ --boot loader=/usr/share/OVMF/OVMF_CODE_4M.secboot.fd,loader_ro=yes,loader_type=pflash,nvram_template=/usr/share/OVMF/OVMF_VARS_4M.ms.fd \ --tpm emulator,model=tpm-crb,version=2.0 \ --console pty,target_type=serial 前述の様に --import を指定することで 新規インストールではなく、xml の再生成になるようです。なお、今回はセキュアブート かつ software tpm のゲストを復旧した所為だと思いますが、最初は mok のブルー画面がでましたので、reset したところ、後は通常通り起動できました。 ちなみに、Debian 13の場合は、 --boot loader=/usr/share/OVMF/OVMF_CODE_4M.secboot.fd,loader_ro=yes,loader_type=pflash,nvram_template=/usr/share...

Debian の grub 経由で物理メディアを別途用意せずに Almalinux 10 をインストール

基本的には bootp で diskless インストールするのとあまり変わらないのですが、bootp でファイルを取得するかわりに、ローカルにコピーしたインストール用の vmlinuz と initrd.gzを Debian 側の grub.cfg に記載することで Debianから Almalinuxをインストールできたので備忘録として挙げておくことにしました。 まず、最初に bootp用の vmlinuz と initrd.img を取得し、/boot/以下にそれぞれ vmlinuz-install initrd.img-install として保存します。 wget https://ftp.riken.jp/Linux/almalinux/10/BaseOS/x86_64_v2/os/images/pxeboot/vmlinuz -O /boot/vmlinuz-install wget https://ftp.riken.jp/Linux/almalinux/10/BaseOS/x86_64_v2/os/images/pxeboot/initrd.img -O /boot/initrd.img-install 次に /boot/grub/grub.cfg を変更します。 ### BEGIN /etc/grub.d/40_custom ### # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'Almalinux 10 install' { linux /boot/vmlinuz-install console=tty0 console=ttyS0,115200n1 inst.repo=https://ftp.riken.jp/Linux/almalinux/10/BaseOS/x86_64_v2/os initrd /boot/initrd.img-install } ### ...

OpenSSLで代替名入りの自己証明書をコマンド一発で作成する

自己証明書を作成するスクリプトは探せばみつかるとはおもいますが、代替名入りの自己証明書をコマンド一発で作成する記事は見かけなかったので、備忘録として挙げておくことにしました。 以下のスクリプトを 例えば sv113-gen-cert.shとして保存し、実行するだけでOKです。 #!/bin/bash openssl req -x509 -days 3650 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -extensions v3_req -config - 今回は決め打ちにしていますが、例えば commonNameやDNS.1などを変数にしたい場合は、コマンド一発ではありませんが、以下のようにすると良いと思います。 # 変数を環境変数として設定 DNS1=sv113.location00.xronos-msys.com IP1=172.16.113.113 # 環境変数を含むヒアドキュメントを標準入力で与える openssl req -x509 -days 3650 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -extensions v3_req -config - なお、"-extenions v3_req" の記述がないと代替名が入りませんので注意してください。 今回は以上です。それでは。