一般ユーザで screen が動かない


苦闘の結果、動くようになったので、そのメモ。

状況

Sorry, could not find a PTY. というエラーがでて、screenが一般ユーザで起動しない。なお、root では通常通り起動して利用可能。

OS
% cat /etc/redhat-release
CentOS release 5 (Final)

coLinux です。

screen インストール方法
% sudo yum -y install screen
screen のバージョン
% screen -v
Screen version 4.00.03 (FAU) 23-Oct-06
TERM環境変数の確認

/bin/zsh

% printenv | grep TERM
TERM=xterm

/bin/bash の場合

$ printenv | grep TERM
TERM=xterm
screen 起動方法

一般ユーザで起動。

% screen -t hoge

エラーメッセージ

Sorry, could not find a PTY.

PTYが見つからん・・・なんぞ・・・orz


ターミナルは、以下のように、なんも表示されない。

PTYとは?

下記を見ると、PTYというのは

/dev/pty[p-za-e][0-9a-f]

にいるようだ。

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pty.7.html

実際に見てみると。いる。

% ls -l /dev/pty*
crw-rw-rw- 1 root tty 2,  0 1216 19:08 /dev/ptyp0
crw-rw-rw- 1 root tty 2,  1  51  2009 /dev/ptyp1
crw-rw-rw- 1 root tty 2,  2  51  2009 /dev/ptyp2
crw-rw-rw- 1 root tty 2,  3  51  2009 /dev/ptyp3
crw-rw-rw- 1 root tty 2,  4  51  2009 /dev/ptyp4
crw-rw-rw- 1 root tty 2,  5  51  2009 /dev/ptyp5
crw-rw-rw- 1 root tty 2,  6  51  2009 /dev/ptyp6
crw-rw-rw- 1 root tty 2,  7  51  2009 /dev/ptyp7
crw-rw-rw- 1 root tty 2,  8  51  2009 /dev/ptyp8
crw-rw-rw- 1 root tty 2,  9  51  2009 /dev/ptyp9
crw-rw-rw- 1 root tty 2, 10  51  2009 /dev/ptypa
crw-rw-rw- 1 root tty 2, 11  51  2009 /dev/ptypb
crw-rw-rw- 1 root tty 2, 12  51  2009 /dev/ptypc
crw-rw-rw- 1 root tty 2, 13  51  2009 /dev/ptypd
crw-rw-rw- 1 root tty 2, 14  51  2009 /dev/ptype
crw-rw-rw- 1 root tty 2, 15  51  2009 /dev/ptypf

結論

色々と試したが、結論は以下の3つで動くようになった。

/dev/ptmx が存在しないので作成する

/dev/ptmx を chmod 666 にしたらどうだろう。という意見を頂きましたが、なんと /dev/ptmx がありません。
なので、以下のように作成、パーミッション設定しました。

# mknod /dev/ptmx c 5 2
# ls -la /dev/ptmx
crw-r--r-- 1 root root 5, 2 12月 17 20:09 /dev/ptmx
# chmod 0666 /dev/ptmx
# ls -la /dev/ptmx
crw-rw-rw- 1 root root 5, 2 12月 17 20:09 /dev/ptmx
/var/run/screenのパーミッション変更

今度は以下のエラーがでた

Directory '/var/run/screen' must have mode 777.

現在のscreen ディレクトリのパーミッション

% ls -la /var/run/ | grep screen
drwxrwxr-x  3 root  screen 4096 1217 13:41 screen/

これを 777 にしてみる。

% sudo chmod 777 /var/run/screen

変更後

% ls -la /var/run/ | grep screen
drwxrwxrwx  3 root  screen 4096 1217 13:41 screen/
もう一度、/var/run/screenのパーミッション変更

今度は以下のエラーがでた

Directory '/var/run/screen' must have mode 775.

これを 775 にしてみる。

% sudo chmod 775 /var/run/screen

変更後

% ls -la /var/run/ | grep screen
drwxrwxrwx  3 root  screen 4096 1217 13:41 screen/


これで、晴れて一般ユーザで動くようになりました!

上記で解決しない方へ

上記で解決しない場合、以下で解決した人もいるようですので、参考までにメモ。

一般ユーザを tty グループに参加させる

No More PTYs, Sorry could not find a PTY
上記を見ると、 tty のグループに参加させればいいよという感じにかいてあります。

% sudo /usr/sbin/usermod -G wheel,tty admin

参加の確認

% cat /etc/group | grep admin
tty:x:5:admin
wheel:x:10:root,admin
admin:x:500:

※グループ参加させるときの注意として、現在参加しているグループもあわせて記述しましょう。そうしないと参加から外れます。
Linux ユーザ情報の変更 - usermod

/etc/fstabの設定

/etc/fstabの設定を変更することによって解決した人もいるようです。

http://www.ortensia.net/diary/?date=20061117

修正前:
none /dev/pts devpts gid=5,mode=20 0 0
修正後:
none /dev/pts devpts gid=5,mode=620 0 
shellを zsh から bash に戻してみる

zshが悪いのか?と思いシェルを /bin/bashに変更してみた。

% chsh -s /bin/bash admin

しかし、私の場合は、ログアウトして再度ログインして、screen -t hoge やってみたが、Sorry, could not find a PTY. は変わらずでした・・orz