【问题标题】:Resize pseudo tty allocated by php调整 php 分配的伪 tty 的大小
【发布时间】:2020-08-01 12:45:30
【问题描述】:

我正在尝试使用 php 和 xterm.js 开发 Web 控制台,

我设法分配了伪 tty 并通过 websocket 将其附加到 xterm.js 但我无法告诉进程终端的大小以使其正常工作,我找不到任何相关文档。

// using react/child-process
$process = new Process('/usr/bin/env bash -l', null, null, [
    0 => ['pty', 'r'],
    1 => ['pty', 'w'],
    2 => ['pty', 'w'],
]);
$process->start($this->loop);

【问题讨论】:

    标签: php websocket pty reactphp


    【解决方案1】:

    我发现在分配的 devpts 上运行 stty 可以解决问题

    if (isset($this->processes[spl_object_id($conn)])) {
        $process = $this->processes[spl_object_id($conn)];
        $data = unpack('i3', $raw);
        $col = $data[2];
        $row = $data[3];
        $getstream = (function () {
            return $this->stream;
        });
        $stty = new Process("stty cols $col rows $row", null, null, [
            $getstream->call($process->stdin), // ex: /dev/pts/0
            $getstream->call($process->stdout),
            $getstream->call($process->stderr),
        ]);
        $stty->start($this->loop);
    }
    

    也可以这样做

    use React\ChildProcess\Process;
    $gettty = escapeshellcmd(PHP_BINARY).' -r "echo posix_ttyname(STDIN).PHP_EOL;"';
    $bash = "setsid bash -l"; // setsid is important here
    $process = new Process(
        "$gettty && $bash",
        null, null,
        [
            ['pty', 'r'],
            ['pty', 'w'],
            ['pty', 'w'],
        ]
    );
    // TODO: read the first line and get the tty path so can run stty on it later.
    

    这是一个简单的例子: https://gist.github.com/eslym/d3bd7809681aa9c1eb34913043df9bb6

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2013-07-27
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多