MSYS2 は cygwin とほぼ同じみたいなので、ビルドパッケージを流用する。
※WSL2 の Debian10 環境でも apt でパッケージを入れると起動できませんが、新しい screen 4.8.0 を自前で入れると解決するようです。最後の #ifndef の追加は不要。
cygwin用のビルドパッケージをダウンロードしてビルド
※2020/05 現在、最新版は screen-4.8.0-1-src.tar.xz になります。
[~]$ wget ftp://ftp.iij.ad.jp/pub/cygwin/x86_64/release/screen/screen-4.6.2-1-src.tar.xz
[~]$ tar xJvf screen-4.6.2-1-src.tar.xz
screen-4.6.2-1.src/
...snip
[~]$ cd screen-4.6.2-1.src
[~/screen-4.6.2-1.src]$ tar xzvf screen-4.6.2.tar.gz
screen-4.6.2/
...snip
[~/screen-4.6.2-1.src]$ ls -l *patch*
-rw-r--r-- 1 123abc なし 12391 10月 23 2017 screen-4.6.2-1.cygwin.patch
-rw-r--r-- 1 123abc なし 287 10月 23 2017 screen-4.6.2-1.cygwin.patch.sig
-rw-r--r-- 1 123abc なし 783 10月 23 2017 screen-etcscreenrc.patch
-rw-r--r-- 1 123abc なし 1223 10月 23 2017 screen-install-exe.patch
-rw-r--r-- 1 123abc なし 604 10月 23 2017 screen-terminfo-autoconf.patch
おや?sig ファイルがありますねぇ。一応検証しておきますか。
$ gpg --verify screen-4.6.2-1.cygwin.patch.sig
gpg: keybox'/home/123abc/.gnupg/pubring.kbx'が作成されました
gpg: 署名されたデータが'screen-4.6.2-1.cygwin.patch'にあると想定します
gpg: 2017年10月23日 23時09分02秒 JSTに施された署名
gpg: RSA鍵49F39937BC7E1705を使用
gpg: 署名を検査できません: 公開鍵がありません
ありゃま、公開鍵が無くて検証できないって。そりゃそうか。
$ gpg --keyserver pgp.mit.edu --recv-key 49F39937BC7E1705
gpg: key 49F39937BC7E1705: 鍵がないため57個の署名は検査しません
gpg: /home/123abc/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵49F39937BC7E1705: 公開鍵"Andrew E. Schulman <andrex@utexas.edu>"をインポートしました
gpg: 究極的に信用する鍵が見つかりません
gpg: 処理数の合計: 1
gpg: インポート: 1
あった!
$ gpg --verify screen-4.6.2-1.cygwin.patch.sig
gpg: 署名されたデータが'screen-4.6.2-1.cygwin.patch'にあると想定します
gpg: 2017年10月23日 23時09分02秒 JSTに施された署名
gpg: RSA鍵49F39937BC7E1705を使用
gpg: "Andrew E. Schulman <andrex@utexas.edu>"からの正しい署名 [不明の]
gpg: 別名"Andrew E. Schulman <andrex@tealtoes.org>" [不明の]
gpg: 別名"Andrew E. Schulman <schulman.andrew@epa.gov>" [不明の]
gpg: 別名"Andrew E. Schulman <andrex@5200-glenwood.net>" [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg: この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガープリント: 5162 0A97 54EB FEFC B702 AF0F 49F3 9937 BC7E 1705
正しい署名とあるので、screen-4.6.2-1.cygwin.patch は Andrew E. Schulman さんが署名をした時点から変更が加えられていないことが分かります。(他のファイルは知らん)
これでは Andrew E. Schulman さんが信用できる (変なものを仕込まない) 人か、また公開鍵が本当に本人の物かが分からないのですが、ここではそれ以上は追及しないことにして次へ。
README ファイルがエラーになったみたいですねぇ。ま、読まないからいいか。-p1 の弊害ですね。 ん?えらー? 出てくるのは perl や python ばっかりorzここから何か書いてあるんですがすっ飛ばして
[~/screen-4.6.2-1.src]$ cd screen-4.6.2/
[~/screen-4.6.2-1.src/screen-4.6.2]$ for i in ../*.patch
> do
> patch < $i
> done
The next patch would create the file README,
which already exists! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored
patching file 256colors.pl
can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ur screen-4.0.3.orig/etc/etcscreenrc screen-4.0.3/etc/etcscreenrc
|--- screen-4.0.3.orig/etc/etcscreenrc 2003-12-05 08:46:13.000000000 -0500
|+++ screen-4.0.3/etc/etcscreenrc 2007-07-06 16:17:38.140625000 -0400
--------------------------
File to patch: etc/etcscreenrc
patching file etc/etcscreenrc
patching file Makefile.in
patching file configure.ac
Hunk #1 succeeded at 663 (offset -26 lines).
[~/screen-4.6.2-1.src/screen-4.6.2]$ autoconf
[~/screen-4.6.2-1.src/screen-4.6.2]$ export CYGWIN ; export CFLAGS=-DNCURSES_STATIC
[~/screen-4.6.2-1.src/screen-4.6.2]$ ./configure --enable-colors256 --enable-rxvt_osc
......
configure: checking select with -lnet -lnsl...
configure: error: !!! no select - no screen
[~/screen-4.6.2-1.src/screen-4.6.2]$
configure を読んでみるとどうやら select(2) が無いと文句を言っているらしい。
※あとで分かったけど、export は必要なかったよ。$ pacman -Ss select
select(2) はどこー。$ uname -smr
MINGW64_NT-10.0 2.11.1(0.329/5/3) x86_64
MSYS2 MSYS を使わないと駄目🙅
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[11]% uname -smr
MSYS_NT-10.0 2.11.1(0.329/5/3) x86_64
tcsh に乗り換えw
一度バッサリ消して、解凍し直してからの
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[19]% foreach i ( ../*.patch )
foreach? patch -p1 < $i
foreach? end
patching file screen-4.6.2/CYGWIN-PATCHES/README
patching file screen-4.6.2/CYGWIN-PATCHES/test/256colors.pl
patching file etc/etcscreenrc
patching file Makefile.in
patching file configure.ac
Hunk #1 succeeded at 663 (offset -26 lines).
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[22]% autoconf
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[23]% ./configure --enable-colors256 --enable-rxvt_osc
ありゃ?patch で文句言われなかったなぁ? configure で色々足りないといわれるので
% pacboy -S ncurses-devel (for `missing tgetent')
% pacboy -S libcrypt-devel (for `missing lcrypt')
*-devel はヘッダとかが入ってるやつ。 devel が付いてないパッケージは ライブラリーだけなのでコンパイルできません。
※WSL2 環境の Debian GNU/Linux 10 (buster) では sudo apt install libncursesw5-dev
しました。
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[32]% ./configure --enable-colors256 --enable-rxvt_osc
...snip...
Now please check the pathnames in the Makefile and in the user
configuration section in config.h.
Then type 'make' to make screen. Good luck.
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[33]%
おーよ
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[33]% make -j6 install
...snip...
chmod: '/usr/lib/terminfo/s/screen*' にアクセスできません: No such file or directory
make: [Makefile:92: install] エラー 1 (無視されました)
termcap entry (./terminfo/screencap) should be installed manually.
You may also want to install ./etc/etcscreenrc in /usr/etc/screenrc
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[34]%
とりあえずインストール完了。
123abc@H97-PRO(~)[37]% rehash
123abc@H97-PRO(~)[38]% screen
Directory /tmp/uscreens/S-123abc must have mode 700.
あー、ディレクトリのパーミッションがおかしいやつか。Windows の acl と整合が取れないから無理なやつね。
パーミッションのチェックはコメントアウト!
% diff -u screen.orig screen.c
--- origsrc/screen-4.6.2/screen.c 2018-10-24 08:18:26.679971600 +0900
+++ src/screen-4.6.2/screen.c 2018-10-24 08:22:57.022879200 +0900
@@ -1108,8 +1108,10 @@
Panic(0, "Directory '%s' must be owned by root.", SockDir);
n = (eff_uid == 0 && (real_uid || (st.st_mode & 0775) != 0775)) ? 0755 :
(eff_gid == (int)st.st_gid && eff_gid != real_gid) ? 0775 : 0777;
+#ifndef __MSYS__
if (((int)st.st_mode & 0777) != n)
Panic(0, "Directory '%s' must have mode %03o.", SockDir, n);
+#endif
}
sprintf(SockPath, "%s/S-%s", SockDir, LoginName);
if (access(SockPath, F_OK)) {
@@ -1144,8 +1146,10 @@
#endif
}
+#ifndef __MSYS__
if ((st.st_mode & 0777) != 0700)
Panic(0, "Directory %s must have mode 700.", SockPath);
+#endif
if (SockMatch && index(SockMatch, '/'))
Panic(0, "Bad session name '%s'", SockMatch);
SockName = SockPath + strlen(SockPath) + 1;
からの make install して完成!
123abc@H97-PRO(~/screen-4.6.2-1.src/screen-4.6.2)[76]% find /usr/lib/terminfo/ -name screen\*
/usr/lib/terminfo/73/screen
/usr/lib/terminfo/73/screen+fkeys
/usr/lib/terminfo/73/screen+italics
/usr/lib/terminfo/73/screen-16color
...snip...
ファイルはあるっぽいからインストールされてなくてもいいね。多分。
etcscreenrc は、ホームディレクトリに .screenrc としてコピーしておきましょう。
/いじょ
めも
Windows で、繋いでないけど登録されているドライバを見たい場合
C:>set devmgr_show_nonpresent_devices=1
C:>start devmgmt.msc
そして起動してきたデバイスマネージャのメニューから「表示」→「非表示のデバイスの表示」
かな?