問題タブ [pty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Eventmachine との PTY 出力の同期
ruby 1.9.3 の PTY および io/console モジュールを使用して、telnet または ssh 経由で nCurses アプリケーションを実行する EventMachine サーバーを作成しようとしています。
@reader.read に渡された引数の値をいじると、画面の一部をクライアント側に表示することができますが、クライアントの端末の実際のサイズを初期またはクライアントが端末のサイズを変更した後。
出力をクライアントの端末のサイズと同期するにはどうすればよいですか? telnet/netcat で可能ですか、それとも ssh のようなより堅牢なプロトコルを使用する必要がありますか?
前もって感謝します。
c - pty を使用した GCC でのコンパイル エラー
私はCでptyをいじっていますが、何らかの理由でコードがコンパイルされません
-lutil でコンパイルすると、次のエラーが出力されます。
私は何が欠けていますか?
注:ubuntu 12.04 LTS 64ビットでコンパイルしています
編集:gcc test3.c -o test3 -lutil
成功せずに試しました。
linux - 複数のデバッグ端末に Linux 疑似端末 API を使用する
Ubuntu Linux:擬似端末ペアのマスター側を参照するパスを取得する方法有効な Linux パスを持っていません。
この非常に優れた Liunx API ブックの最後の章で説明されている動作中の Linux 疑似端末の例http://www.man7.org/tlpi/code/online/all_files_by_chapter.html#ch64に関して: http://www.nostarch .com/tlpi
Linux linux 疑似端末 API の現状に関する質問です。上記の例では、必要に応じて fork/exec されたプログラムの stdin/stdout/stderr ストリームを PTY スレーブにリダイレクトします...すべて PTY の側で問題ありません。
しかし、複数タブのターミナル エミュレータ プロセスに引数として渡す必要がある疑似ターミナル マスターのパスは、まだ存在していないようです。
私の質問は、疑似端末ペアのマスター側の名前付きパスの作成に関するものです...上記のコード例では、PTYマスター側のように、PTYスレーブ側のみが実際に名前を持っていることがわかります。は、開いているファイル記述子を介してのみ参照されます...そして、「readlink("/dev/fd/3"...) を介してマスター側のパスを照会すると、PTY マスター クローン パス "/ dev/ptmx"、したがって、PTY マスター側にはまだパス名がない可能性があると思いますか? .. link() を呼び出して有効なパスを作成する必要があるかもしれないと思いました...しかし link()引数として開いているファイル記述子ではなく、既存のパスのみを受け取りますか? ...結果のPTYマスターへのリンクを作成することを期待して、PTYクローンデバイスに戻るlink("/dev/ptmx", NewPTM_name)を呼び出してみました側、しかし、その呼び出しは失敗し、-1 が返されます。
次に、この PTY マスター側のパス文字列引数をターミナル エミュレーターに、おそらくコマンド ライン経由で、または RoxTerm の場合はおそらく DBus 経由で渡したいと思います...
多くのターミナル エミュレータ プログラムには、ターミナル ウィンドウ内でプログラムを実行できるようにする -e または -x 引数があることを認識しています。 ... この作業は共有メモリ マルチプロセッシング システムをサポートするため、このような作業が必要です。
python - OS X で疑似端末の tty.setraw がハングする
これは Ubuntu システムでは問題なく動作するコード スニペットですが、OS X で setraw を呼び出すと Python プロセスがハングします。
このコードに何か問題がありますか、それとも OS X の動作が異なりますか? 以前は機能していましたが、コードのわずかな変更により、OS X でブロックされるようになりました...
ruby - 複数の値を PTY 端末に渡す
Ruby を使用して、PTY を使用して複数の値を取る CLI とやり取りしようとしています。ただし、PTY によって生成された疑似端末を取得して、最初に渡した値を確認することしかできません。以下のスクリプトをテストします。
test.rb
inputTest.rb
$ > 猫 test.log
なぜ最初の応答しか得られないのかわかりません。
PSここでexpectを使用できることはわかっていますが、デバッグ目的で何が起こっているかをより詳細に制御できるように、カスタム関数に置き換えました。
php - ssh2_exec() の PTY 引数を理解する
次の答えは私を満足させません。何が起こっているのかもう少し知りたいです。 誰でも ssh2_exec() 関数呼び出しで $pty 引数を説明できますか
クライアントがサーバーに PTY を生成するように強制するか、それとも PTY は完全にクライアント側にあるのか? 私の知る限り、たとえばSSHdなどのプロセスに接続されているため、サーバーへの呼び出しが必要です。また、trueに設定すると、デフォルトのシェルがエミュレートされますか? それは何ですか?たとえば、PTYをエミュレートするxtermを渡すことができることは知っていますが、これは何か違いがありますか? エミュレーションは、私の観点からは、それが実際の PTY ではないことを意味します。
少し読みにくいかもしれませんが、私はこの概念を理解しようとしています。ありがとうございました。それは有り難いです。
c# - C#でANSI端末をエミュレートするには?
パテ ウィンドウを作成し、その PTY に接続し、それを介して世界と通信する Mono のアプリケーションがあります。
Putty のおかげで、完全な端末を使用できるようになりました。特別なコード (Ctrl+C、Ctrl+Z など) をアプリに送信できます。
アプリケーションを起動する端末に戻りたいと思います。できるだけ多くのキーの組み合わせを取得したいと思います。そうすれば、ウィンドウがポップアップすることなく、ssh経由でアプリを使用できるようになります。
私の考えは、現在の端末を /dev/ から取得し、考えられるすべてのシグナルを無視 (または処理) し、押されたキーをポーリングしてアプリに転送することです。これは、P/Invoke を使用して C で実行できます。
これは可能ですが、コーディングには手間と時間がかかります。
私はそれがすでに行われているのだろうか?ライブラリについて知っていますか?最善の選択肢は、コールバックを 1 つまたは 2 つ登録することですが、それを簡単にするソリューションがあれば素晴らしいでしょう。
TL;DR
次のようなインターフェイスを提供するライブラリが必要です。
ANSI端末コードを一連のバイトとして受け取ることができました。
代替手段は、ANSI 端末規則に従って、に変換ConsoleKeyInfo
するライブラリです。byte[]
terminal-emulator - pttyがある場合、ターミナルエミュレーションを実装する必要がありますか?
疑似端末が与えられた場合(たとえば、pty-req(http://www.ietf.org/rfc/rfc4254.txt)から)、戻ってくるデータをエミュレートする必要がありますか、それともすでにエミュレートされたデータですか? ?
python - pty の下で実行しているプロセスのターミナル フォアグラウンド プロセス グループを設定するにはどうすればよいですか?
コマンドが失敗したときにretry.pyと呼ばれるコマンドを繰り返すための単純なラッパー スクリプトを作成しました。ただし、子コマンドの出力を見たいので、いくつかの pty トリックをプルする必要がありました。これは rsync などのプログラムでは問題なく機能しますが、scp などの他のプログラムでは、進行状況メーターなどを表示するために追加のテストが適用されます。
scp コードには、大まかに次のようなテストがあります。
ラッパースクリプトを実行すると失敗します。私の単純な tty_test.c テスト ケースでわかるように:
と:
pty fd の IOCTL として終了する tcsetpgrp() を使用しようとしましたが、pty の -EINVAL が発生します。可能であれば Python サブプロセス機構を使い続けたいですか、それとも手動で fork/execve'ing する必要がありますか?
python - Linux で PyRun_InteractiveLoop() に別の pty との間で入力/出力を取得させる
Cプログラムで、Cプログラムが起動されたもの(pts/1など)とは異なる疑似端末(pts/4など)から入力を取得して出力するPythonインタラクティブループを実行したい.
対話型ループを実行する基本的な方法は次のとおりです。
ただし、pts/4 ではなく、プログラムを起動した疑似端末 (pts/1) を使用するため、これは問題を解決しません。
機能するソリューションは次のとおりです。
この解決策の欠点は、ファイル記述子 0 1 2 がプログラムの起動元の疑似端末との通信に使用できなくなることです。これらの記述子は事前に複製されている可能性がありますが、0 1 2 の使用を主張し、複製された fds を使用できない関数がいくつかあります。
理想的には、対話型ループが fds 0 1 2 に依存せず、次のように /dev/pts/4 で実行されることを望みます。
残念ながら、これは期待どおりには機能せず、デフォルトでプログラムが起動された疑似端末を使用する stdin を使用するのと同じ効果があります。
したがって、質問は 2 つあります。
- PyRun_InteractiveLoop() が stdin / fds 0 1 2 でしか実行できない場合、なぜ引数を取る必要があるのでしょうか?
- stdin / fds 0 1 2 以外、特にユーザー定義の疑似端末で実際に機能する場合、それを行うにはどのように呼び出す必要がありますか?