screenの”Cannot open your terminal ‘/dev/pts/0′”対策

su で切り替わったユーザーで $ screen を実行すると

“Cannot open your terminal ‘/dev/pts/0’ – please check.”

というようなエラーが発生する。

エラーが発生する原因

screen (やそのリライトである tmux) は擬似ターミナルへの read/write を行うことで実現されており、この擬似ターミナルはログイン時にログインユーザー向けに作成される。
su でユーザーが切り替わっても新規に擬似ターミナル(pty)が作られるわけではないので、新規に起動する screen と既存 pty の実行ユーザーが異なり、権限のない pty に R/W しようとして上記の様なエラーが発生する。

解決策

一人で使っているサーバーなら

  • root 権限で screen を起動してその後、各ユーザになる
  • pty の権限を chmod で変える

といった豪快な解決案もなくもない。

多くの環境下で現実的なのは、切り替わったユーザで script コマンドを実行してユーザー向けに新規に擬似ターミナルを作成した上で、screen を起動する。

再現手順

$ tty
/dev/pts/0
$ echo test > $(tty)
test
# john ユーザーに切り替わる
$ sudo su - john
$ screen
Cannot open your terminal '/dev/pts/0' - please check.
$ tty
/dev/pts/0  # ユーザー切り替え前の tty を使いまわしている
$ echo test > $(tty)
-su: 3: cannot create /dev/pts/0: Permission denied
$ ls -l /dev/pts # 0 番は切り替え前の hoge ユーザーがオーナー
total 0
crw--w---- 1 hoge tty 136, 0 Aug 11 15:39 0
c--------- 1 root root 5, 2 Aug 11 14:27 ptmx

script コマンド(本来はターミナルの作業内容を記録するコマンド)で無理やり擬似ターミナルを作成

$ script /dev/null # create a new pseudo terminal
Script started, file is /dev/null
$ ls -l /dev/pts # 新規に john ユーザーがオーナーの 1 番の pty が作成された
total 0
crw--w---- 1 hoge tty 136, 0 Aug 11 15:40 0
crw--w---- 1 john tty 136, 1 Aug 11 15:40 1 # <- new pty
c--------- 1 root root 5, 2 Aug 11 14:27 ptmx

$ echo my pseudo terminal is $(tty) > $(tty)
my pseudo terminal is /dev/pts/1
$ screen
...
$ ls -l /dev/pts
total 0
crw--w---- 1 hoge tty 136, 0 Aug 11 15:41 0
crw------- 1 john tty 136, 1 Aug 11 15:41 1
crw--w---- 1 john tty 136, 2 Aug 11 15:41 2
c--------- 1 root root 5, 2 Aug 11 14:27 ptmx

Reference

Tagged with: ,
Posted in linux
One comment on “screenの”Cannot open your terminal ‘/dev/pts/0′”対策
  1. ayukuns says:

    Reblogged this on Sandbox and commented:
    ServerMania VPSでのRootログイン時でのScreen実行時に必要だった。対策が必要

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 1 week ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: