やるきなし

2018/01/24 18:17 / VMWare 上で Synaptics Touchpad の two-finger scroll を使う

Host: Windows 10, Guest: Linux 環境なのだが,Linux 側で Synaptics Touchpad の two-finger scroll が効かない.調べた感じ https://superuser.com/questions/131297/use-synaptics-touchpad-scroll-in-vmware-guestにあるとおりhttps://bitbucket.org/DouglasCameron/windows-trackpad-scroller-for-vmwareを使うのが最も簡単(VMWare動かしたままで,Hostの再起動も不要.ダウンロードして展開して,.exe を実行してダイアログの質問に答えるだけ).

https://superuser.com/questions/131297/use-synaptics-touchpad-scroll-in-vmware-guestにhorizontal scrollingが効かないとか書かれているが,普通にhorizontal scrollingも使える.

2018/01/22 11:40 / tclsh /usr/lib/modulecmd.tcl bash autoinit launches less command

いつものように google chrome を起動しようとしたら以下のような謎な状態に.

% google-chrome &
[1] 8067
% 
[1]  + suspended (tty output)  google-chrome

/opt/google/chrome/google-chrome は bash script なのだが,以下のような空の bash script でも再現することがわかって,どうやら bash と environment-modules 付近の問題.

#!/bin/bash

/usr/share/modules/init/bash から起動される tclsh /usr/lib/modulecmd.tcl bash autoinit が less を起動してしまう模様.

/usr/lib/modulecmd.tcl は environment-modules に含まれていて 4.1.0-1 ではこの問題が発生して 4.0.0-2 では問題は発生しない.

modulecmd.tcl に 4.1.0-1 で追加された以下の行関連が問題かと探ったが,どうやら環境変数 PAGER に設定されていた less が起動されていた模様(modulecmd.tclPAGERMODULES_PAGER を pager 向けの環境変数として使うらしいが(408行目付近),詳細までは見ていない).

set g_pager "/usr/bin/less" ;# Default command to page into, empty=disable

ということで,PAGER 環境変数を unset して解決(もしくは export PAGER=, 但しこの場合 man command が stdout に出力してそのまま終了してしまう).

2018/01/10 00:52 / nvidia-kernel-dkms 384.98-3~bpo9+1 on Linux 4.14.9 以降

https://devtalk.nvidia.com/default/topic/1028134/error-upgrading-to-4-14-10-kernel-in-xubuntu-17-10-in-dkms-384-90/?offset=2などで報告されていて,各所で nvidia のドライバの version を上げることが解決策として示されているが,nvidia-kernel-dkms 384.98-3~bpo9+1 が Linux 4.14.9 以降で以下のようなエラーでコンパイルできない.

/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c: In function ‘block_cpu_fault_locked’:
./arch/x86/include/asm/processor.h:826:39: error: implicit declaration of function ‘task_stack_page’ [-Werror=implicit-function-declaration]
  unsigned long __ptr = (unsigned long)task_stack_page(task); \
                                       ^
./arch/x86/include/asm/processor.h:909:26: note: in expansion of macro ‘task_pt_regs’
 #define KSTK_EIP(task)  (task_pt_regs(task)->ip)
                          ^~~~~~~~~~~~
/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c:8771:41: note: in expansion of macro ‘KSTK_EIP’
                                         KSTK_EIP(current));
                                         ^~~~~~~~

上記問題に対応した version が stable backports でまだ利用できないので,とりあえず対処する.方法は,https://patchwork.kernel.org/patch/10137715/のとおり#include <linux/sched/task_stack.h>すること.

Kernel側の原因はx86/entry/64: Remove thread_struct::sp0.x86_64 と x86_32 で task_pt_regs が共通化され,いままで 64bit だと task_stack_page が不要だったが,使われるようになって,そのため#include <linux/sched/task_stack.h>が必要になったということらしい.

Debian GNU/Linux experimental では 387.34 が利用可能で,少しコードをみてみたが,以下がnvidia-uvm/uvm_linux.hに追加されていた(conftest.shlinux/sched/task_stack.h がチェックされ NV_LINUX_SCHED_TASK_STACK_H_PRESENT がセットされる).

#if defined(NV_LINUX_SCHED_TASK_STACK_H_PRESENT)
#include <linux/sched/task_stack.h>
#endif

追記 (2018/1/13)

stable-bpo 384.111-1~bpo9+1 で本件解決した模様.

Related articles

2017/12/27 23:38 / FTP の NAT 超え

Private network から少なくとも Passive で FTP を使いたくてずっと悩んでいたのだが以下で解決した.

% echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

これをしないと modprobe nf_nat_ftpmodprobe nf_conntrack_ftp していても,これらの機能が働かない.他の iptables の設定は以下の通り.

iptables -F
iptables -t nat -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

つまり,基本 DROP で,特定のポートのみ以下で開けていく方式で運用している.

iptables -A FORWARD -i <interface> -s <network> -p tcp --dport <port> -j ACCEPT

Passive mode の場合は nf_conntrack_ftp が使われて,PASV コマンドをクライアントからサーバに送ったあとにサーバから返ってくるサーバの使用ポート番号向けのポートが自動で開く(RELATED として INPUT が許可される).

Active の場合は nf_nat_ftp が使われて,PORT コマンドでクライントからサーバに通知する情報が適切にNATで変換される.つまりプライベートネットワークから送出した PORT 10,0,0,X,202,171 といったコマンドが,NAT で PORT <Global IP>,202,171 に変換されてサーバに転送され,同時にサーバの IP address からの source port 20, destination port 50428 (= 202<<8 + 171) のパケットが通るようになる.

ちなみに FTPS (FTP over TLS) も ftp と同じ 21番ポートを利用するが,通信が暗号化されてしまうので,上記のような変換等は全く効かない(そのサーバ向けに使いそうなポートを全開放するしかないっぽい).

以上,tcpdumpiptables ならびに lftp を駆使して探ったのだが,以下 lftp メモ.

Bool値としてはいろいろ使えるらしい(以下 man lftp より).

Boolean settings can be one of (true, on, yes, 1, +) for a True value or one of (false, off, no, 0, -) for a False value.

Related articles

2017/12/27 23:20 / Switch to next input source (Gnome)

最近の Gnome では input source (キーボードの言語切り替えも含む)の切り替えは Windows+Space が割り当てられている.慣れればよいのかもしれないが,慣れ親しんでいる Shift+Space を割り当てたい.やり方はhttps://askubuntu.com/questions/604462/how-to-set-languages-shortcuts-from-config-files-or-command-lineにあるとおり.以下のようなコマンドで Windows+Space と Shift+Space の両方を割り当てることができる.

% gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift>space','<Super>space']"

GUI の Settings → Devices → Keyboard では1つしか割り当てられない(上のように2つを割り当てた場合は始めのもののみ表示される).

ちなみに Emacs での日本語入力は emacs-mozc を使いたいので(そうしないと C-x C-c するにもいちいち日本語モードから抜ける必要がある),以下を ~/.Xresources に書いておく.

Emacs*useXIM: false

Related articles