Получите скэн-коды в восьмеричном формате

Я не знаю то, что значения по умолчанию для SSH.EXE cygwin, но для openssh значение по умолчанию не должно включать передачу X11.

То значение по умолчанию может быть переопределено путем изменения файла конфигурации ssh клиента (например, ~/.ssh/config на поле unix/linux) или при помощи -X опция на ssh командной строке - например. ssh -X remotehost gimp

Могла бы быть стоящая проверка, имеет ли cygwin SSH.exe то же значение по умолчанию и/или ту же или подобную опцию.

BTW, что происходит когда Вы ssh к полю Mint и затем выполненный gimp из командной строки? если это не работает, попробовало еще раз с -X.

Наконец, можно хотеть попробовать шпаклевку как ssh клиент на поле окон.

1
26.10.2013, 22:42
2 ответа

При выполнении этого в "режиме ASCII", он печатает восьмеричное представление ключа.

Пример

$ sudo showkey -a

Press any keys - Ctrl-D will terminate this program

a    97 0141 0x61
b    98 0142 0x62
c    99 0143 0x63
d   100 0144 0x64
e   101 0145 0x65
f   102 0146 0x66
g   103 0147 0x67
1    49 0061 0x31
2    50 0062 0x32
3    51 0063 0x33
^D    4 0004 0x04

3-й столбец является восьмеричным кодом.

выборка от showkey страница справочника

Когда в 'ASCII' выводят режим, showkey печать к стандартному выводу десятичное, восьмеричное, и шестнадцатеричное значение (значения) нажатой клавиши, согласно он представляет контурную карту.

-1
28.01.2020, 02:02
  • 1
    Это дает ascii- код, но не скэн-код. Из showkey страницы справочника: showkey prints to standard output either the scan codes or the keycode or the ascii code of each key pressed. –  student 27.10.2013, 08:21

showkey не имеет переключателя для этого, но вы всегда можете перенаправить вывод в другую программу для выполнения преобразования.

С помощью zsh вы можете сделать это следующим образом:

stdbuf -oL showkey -s | while read line
do
  if [[ "$line" =~ '^0x' ]]
  then
    for code in ${(z)line}
    do
      printf "0%o " $code
    done
    echo
  else
    echo $line
  fi
done

stdbuf является частью GNU coreutils и может использоваться для изменения операций буферизации в стандартных потоках. Вызывается с помощью -oL , он настраивает stdout на строчную буферизацию. Это необходимо сделать для того, чтобы выходные данные команды showkey -s проходили сразу же по конвейеру построчно. В противном случае вывод будет передаваться только при заполнении буфера (обычно несколько килобайт) или выходе из программы.

Выходные данные передаются по конвейеру в цикл while , который считывает каждую строку в переменную строку , пока конвейер не закроется.Если строка начинается с 0x (соответствует регулярному выражению '^ 0x'), каждое шестнадцатеричное число ( $ {(z) param} разбивает строку на слова, такие как zsh разделит командную строку) преобразуется в восьмеричное (на самом деле шестнадцатеричное число неявно преобразуется оболочкой в ​​десятичное, а затем форматируется как восьмеричное с помощью printf ). Если строка не начинается с 0x , распечатайте ее как есть.


Вы также можете использовать perl :

stdbuf -oL showkey -s | perl -e '
  while(<STDIN>){
    if(/^0x/){ 
      printf "0%o ", hex($_) for split; 
      print $/;
    } else { 
      print 
    }
  }'

Применяется тот же принцип.

1
28.01.2020, 02:02

Теги

Похожие вопросы