2017-04-10 22 views
0

使用TIOCSTI我试图注入组合键(如ALT +)转换成使用Python中TIOCSTI一个tty。注射组合键进入猛砸TTY在Python

对于一些组合键,我发现相应的十六进制代码为Bash shell使用以下table这很好。

从这个表上,我可以看到,例如CTRL +一个'\x01'

import sys,os,Queue 
import termios,fcntl 
# replace xx with a tty num 
tty_name = "/dev/pts/xx"; 
parent_fd = os.open(tty_name, os.O_RDWR) 

special_char = "Ctrl_a" 

if special_char == "Ctrl_a": 
    send_char = '\x01' 
if special_char == "Ctrl_e": 
    send_char = '\x05' 
if special_char == "Ctrl_c": 
    send_char = '\x03' 

fcntl.ioctl(self.parent_fd, termios.TIOCSTI, send_char) 

但我怎么能得到十六进制代码为其他组合,如 ALT +f等我需要一个完整的列表或方式如何获取这些信息的任何可能的组合,因为我想实现大多数bash快捷方式移动,操纵历史等注入。

或者是否有任何其他方式注入使用TIOCSTI的键组合?

由于我只能发送单个字符到tty我不知道是否还有其他可能。

非常感谢您的帮助!

回答

0

“控制码”的常用工作是“控制”修饰符从字符码中减去64。

“A” 是ASCII字符65,所以 “Ctrl键 - ” 为 “65-64 = 1”。 您是否足以将此方案扩展到您的情况?因此,如果您需要控制代码,例如“Device Control 4”(ASCII代码20),您将添加64,以获得“84”,即“T”。 因此,DC4的控制码将是“控制 + T”。 在反方向上,对于值 “控制 + - [R”(在bash历史搜索)是R-64,所以82-64 = 18(设备控制2)

ASCIItable.com可以具有完整的帮助在ASCII

所有字符代码上市

更新:既然你是专门为“ALT +。”问: “控制平均值减去64" 不适用于Alt键,不幸的是,这似乎完全处理不管怎样,通过键盘驱动程序,通过生成不一定映射到ASCII的“密钥代码”(也称为“扫描码”,可变地写入有或没有空格)。 (键码只是发生映射到ASCII为0-9和A-Z,从而导致许多混乱)

This page列出了一些更多的键码,其中 “155” 为“ALT +

+0

没有键码155不工作。 – OliP