2017-04-10 30 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