标签: tty

Linux 更改为另一个 /dev/ttyX 并在那里运行程序

是否可以在 /dev/tty1 上运行脚本并生成一个在 /dev/tty2 上运行的程序并等待它完成并运行脚本中的其他命令?例如:

echo "Hello, this is from terminal 1"
chvt 2
sh myprogram.sh (I want it to run on tty2, but it runs on tty1)
chvt 1
Run Code Online (Sandbox Code Playgroud)

myprogram.sh:

echo "Hello' this is from terminal 2, please type your input:"
read A
exit A
Run Code Online (Sandbox Code Playgroud)

linux sh tty

3
推荐指数
1
解决办法
2196
查看次数

Perl双向管道IPC,如何避免输出缓冲

我正在尝试与交互式流程进行沟通.我希望我的perl脚本成为用户和进程之间的"模块化人".该过程将文本放入stdout,提示用户输入命令,将更多文本放入stdout,提示用户输入命令,.......提供原始图形:

 User <----STDOUT---- interface.pl <-----STDOUT--- Process
 User -----STDIN----> interface.pl ------STDIN---> Process
 User <----STDOUT---- interface.pl <-----STDOUT--- Process
 User -----STDIN----> interface.pl ------STDIN---> Process
 User <----STDOUT---- interface.pl <-----STDOUT--- Process
 User -----STDIN----> interface.pl ------STDIN---> Process
Run Code Online (Sandbox Code Playgroud)

以下模拟我正在尝试做的事情:

    #!/usr/bin/perl

    use strict;
    use warnings;

    use FileHandle;
    use IPC::Open2;
    my  $pid = open2( \*READER, \*WRITER, "cat -n" );
    WRITER->autoflush(); # default here, actually
    my $got = "";
    my $input = " ";

    while ($input ne "") {
            chomp($input = <STDIN>);
            print WRITER "$input \n";
            $got = <READER>;
            print …
Run Code Online (Sandbox Code Playgroud)

perl ipc pipe output-buffering tty

3
推荐指数
1
解决办法
3755
查看次数

确定用户是否在当前tty上运行图形界面

Shell脚本能否确定用户是否在用户所使用的同一tty上运行图形界面?

也许这甚至不可能?

编辑:

当用户在与用户正在使用的同一tty上运行窗口管理器时,我实际上正在尝试编写一个显示GUI(通过使用zenity / yad)的shell脚本。否则,脚本将退回到普通的命令行界面。

bash shell tty

3
推荐指数
1
解决办法
1837
查看次数

Golang从stdin读取,如何检测特殊键(输入,退格等等)

我有以下程序从stdin读取用户输入:

var input string = ""
            exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run()
            exec.Command("stty", "-F", "/dev/tty", "-echo").Run()
            var b []byte = make([]byte, 1)
            for {
                input += string(b)
            }
Run Code Online (Sandbox Code Playgroud)

我想在for循环中放置某种条件,以便当用户按下"enter"(例如)时可以"中断",或者当用户按下(退格键)时从字符串中删除一个char.但是,我无法弄清楚这两个键的字节数组或字符串表示是什么.我如何解决这个问题?输入只打印一个\ w和退格键修剪一个未定义的字符.

stdin go tty pty

3
推荐指数
1
解决办法
4335
查看次数

如何限制systemd中tty的数量

如果我跑步,systemctl我会得到很多 tty(见上文)。有什么办法可以限制这个数字,从而节省一些内存,因为显然我永远不需要这堆tty。

sys-devices-virtual-tty-ttya0.device                    loaded active plugged   /sys/devices/virtual/tty/ttya0
[...]
sys-devices-virtual-tty-ttyzf.device                    loaded active plugged   /sys/devices/virtual/tty/ttyzf
Run Code Online (Sandbox Code Playgroud)

tty systemd

3
推荐指数
1
解决办法
1728
查看次数

“ssh sudo -u user -i”的 subprocess.Popen 失败并显示“sudo:抱歉,你必须有一个 tty 才能运行 sudo”

我想通过 ssh 进入远程服务器,更改用户然后执行脚本。我正在subprocess这样做,但它似乎sudo -u userB -i没有改变用户。

HOST = 'remote_server'
USER = 'userA'
CMD = ' whoami; sudo -u userB -i; whoami'

ssh = subprocess.Popen(['ssh', '{}@{}'.format(USER, HOST),CMD],
                            shell=False,
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)
result = ssh.stdout.readlines()   
if not result:
    err = ssh.stderr.readlines()
    print('ERROR: {}'.format(err))
else:
    print "success"
    print(result) 

$ success
$ ['userA\n', 'userA\n']
Run Code Online (Sandbox Code Playgroud)

当我替换为 时CMD ='sudo -u userB -i && whoami',出现此错误:

错误:['sudo:抱歉,你必须有一个 tty 才能运行 sudo\n']

在终端上,我可以进行无密码 ssh, sudo -u userB -i && whoami

python ssh sudo tty

3
推荐指数
1
解决办法
629
查看次数

3
推荐指数
2
解决办法
754
查看次数

这个tty上的标签有多少个空格

我有一个写入stdout的perl脚本,这是一个tty.有没有办法确定该tty上的选项卡有多少个空格?

perl spacing tty terminfo

2
推荐指数
1
解决办法
300
查看次数

GPSD没有得到很好的解决方案

我有一个通过USB连接到Raspberry Pi的GPS模块.

出于某种原因,我似乎无法使用以下方法获得修复:

CGPS

它似乎没有得到修复并终止.

我也尝试过:

sudo killall gpsd

sudo gpsd/dev/ttyUSB0 -F /var/run/gpsd.sock

然后再次尝试cgps,但这似乎也不起作用.

我甚至尝试过:

sudo nano/etc/default/gpsd

并改变了这条线:

GPSD_OPTIONS = ""

至:

GPSD_OPTIONS = "的/ dev/ttyACM0"

这显然适用于网络上的其他人,但重启后,这也不起作用.

但出于某种原因我做的时候:

gpsmon/dev/ttyUSB0

我得到了完整的数据读数; lat,lon,Sats,altitude,ext.

有没有办法将gpsmon /dev/ttyUSB0句子输出到文本文件?

另外,为什么我不能使用cgps或类似的东西获得修复?

gps tty gpsd raspberry-pi

2
推荐指数
2
解决办法
1万
查看次数

如何通过管道以编程方式使用 sudo?

我正在尝试编写一个程序来执行系统的远程管理。为此,我发出 SSH 命令并通过管道以编程方式提供输入。我还捕获了他们的输出。

一些命令需要提升,所以我需要发出诸如ssh user@host "sudo apt-get install blah".

问题是,sudo除非在其标准输入上找到真正的终端,否则拒绝通过终端直接接受密码。有什么办法可以sudo让我愚蠢地允许这样做吗?

ruby ssh sudo tty

2
推荐指数
1
解决办法
377
查看次数

标签 统计

tty ×10

perl ×2

pipe ×2

ssh ×2

sudo ×2

bash ×1

go ×1

gps ×1

gpsd ×1

ipc ×1

linux ×1

output-buffering ×1

pty ×1

python ×1

raspberry-pi ×1

ruby ×1

rust ×1

sh ×1

shell ×1

spacing ×1

stdin ×1

systemd ×1

terminfo ×1