Se você estiver usando o console ttys ( /dev/tty1
a /dev/tty7
) no modo de texto, poderá ler o buffer de tela diretamente do dispositivo /dev/vcsN
correspondente.
Como você não deve assumir que existem 80 caracteres por linha, é necessário pedir ao terminal para exibir seus caracteres por linha. Em seguida, as matemáticas simples converterão uma coordenada (x, y) em deslocamento (y * c + x) para obter o caractere desejado:
#!/bin/bash
#
tty=$(tty)
vcs_nr="${MY_TTY/*tty/}"
# Read Y, X from first two characters of /dev/vcsaN (we only use X)
xwidth=$(
dd if="/dev/vcsa$vcs_nr" bs=1c count=2 2>/dev/null |
od -t u1 -A d |
awk '{print $3; exit}'
)
# Calculate byte offset into the screen
offset=$(( ($2 -1) * xwidth + ($1 -1) ))
# Read the data
dd count=1 skip="$offset" bs=1 if="/dev/vcs$vcs_nr" 2>/dev/null
Isso pressupõe acesso root aos dispositivos / dev / vcsN, é claro.