Это расширенный комментарий, а не ответ.
В моей системе, в которой Ctrl + Alt + F1 работает правильно, я получаю событие KeyPress для элемента управления и alt , но не для F1 . Хотя я знаю, что это работает, так как меня перевели на tty1.
Это полный вывод xev
в моем случае (для сравнения):
root@debi64:/home/gv/Desktop/PythonTests# xev -event keyboard
Outer window is 0x4400001, inner window is 0x4400002
KeymapNotify event, serial 18, synthetic NO, window 0x0,
keys: 4294967192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeyPress event, serial 25, synthetic NO, window 0x4400001,
root 0x281, subw 0x0, time 11550957, (157,186), root:(748,462),
state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 28, synthetic NO, window 0x4400001,
root 0x281, subw 0x0, time 11550960, (157,186), root:(748,462),
state 0x8, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 28, synthetic NO, window 0x4400001,
root 0x281, subw 0x0, time 11553775, (157,186), root:(748,462),
state 0xc, keycode 67 (keysym 0x1008fe01, XF86Switch_VT_1), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 28, synthetic NO, window 0x4400001,
root 0x281, subw 0x0, time 11553902, (157,186), root:(748,462),
state 0xc, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 28, synthetic NO, window 0x4400001,
root 0x281, subw 0x0, time 11553902, (157,186), root:(748,462),
state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeymapNotify event, serial 28, synthetic NO, window 0x0,
keys: 4294967169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ClientMessage event, serial 28, synthetic YES, window 0x4400001,
message_type 0x11b (WM_PROTOCOLS), format 32, message 0x119 (WM_DELETE_WINDOW)
Я также создал небольшой скрипт на Python, который имитирует Ctrl + alt + F1 нажатие клавиши. Когда я запускаю скрипт, меня тоже без проблем переводят в tty1.
Вы даже можете попробовать запустить этот скрипт на своем компьютере, чтобы проверить, заходите вы на tty1 или нет, в качестве двойной проверки / подтверждения того, что ваша клавиатура работает нормально:
https://github.com/gevasiliou/PythonTests /blob/master/pykey-test.py
PS: Вместо скрипта вы также можете попробовать запустить #chvt 1
, который также должен перевести вас на tty1.
После некоторых исследований другие пользователи сообщили, что клавиши Ctrl + alt + fn перестали работать из-за обновлений xserver (очевидно), которые изменил некоторые настройки разрешения, которые применяются в tty.
Например, в этом посте проблема была решена путем применения определенного разрешения vga во время загрузки в качестве параметра ядра (vga = mode), например vga = 0x0362. Очевидно, одно из этих обновлений системы испортило разрешение у этих ребят, так что, возможно, это также ваш случай (и только бог знает почему).
PS: Чтобы увидеть доступные для вашей системы режимы, вам необходимо запустить hwinfo --framebuffer | grep 'Mode'
и выбрать режим из перечисленных.
Кстати, вы включили некоторую часть xev с F3 в свой вопрос, но каков результат с F1 ?
ОБНОВЛЕНИЕ:
Как для дальнейшего устранения неполадок можно попробовать следующее:
Глядя на исходный код xrandr , кажется, что опция --off выполняет следующие команды:
set_name_xid (& config_output-> mode, None );
set_name_xid (& config_output-> crtc, None);
config_output-> changes | = changes_mode | changes_crtc;
Вы можете попробовать повторно включить --output, указав --mode и --crtc xrandr параметры вместо --auto (на всякий случай, если xrandr "автоматизация" работает некорректно).
/ sys / class / vtconsole
. Это распечатка моей системы, в которой переключение на tty1-2-3-4-5-6 работает нормально:
root@debi64:/home/gv/Desktop/PythonTests# for f in $(find /sys/class/vtconsole/vtcon0/ -type f);do echo -e "File : $f \c\c\c";echo -e "-VALUE : \c";cat $f;done
File : /sys/class/vtconsole/vtcon0/bind -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_active_kids -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_suspended_time -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/autosuspend_delay_ms -VALUE : cat: /sys/class/vtconsole/vtcon0/power/autosuspend_delay_ms: Input/output error
File : /sys/class/vtconsole/vtcon0/power/runtime_enabled -VALUE : disabled
File : /sys/class/vtconsole/vtcon0/power/runtime_active_time -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/control -VALUE : auto
File : /sys/class/vtconsole/vtcon0/power/async -VALUE : disabled
File : /sys/class/vtconsole/vtcon0/power/runtime_usage -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_status -VALUE : unsupported
File : /sys/class/vtconsole/vtcon0/uevent -VALUE :
File : /sys/class/vtconsole/vtcon0/name -VALUE : (S) VGA+
root@debi64:/home/gv/Desktop/PythonTests# for f in $(find /sys/class/vtconsole/vtcon1/ -type f);do echo -e "File : $f \c\c\c";echo -e "-VALUE : \c";cat $f;done
File : /sys/class/vtconsole/vtcon1/bind -VALUE : 1
File : /sys/class/vtconsole/vtcon1/power/runtime_active_kids -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/runtime_suspended_time -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/autosuspend_delay_ms -VALUE : cat: /sys/class/vtconsole/vtcon1/power/autosuspend_delay_ms: Input/output error
File : /sys/class/vtconsole/vtcon1/power/runtime_enabled -VALUE : disabled
File : /sys/class/vtconsole/vtcon1/power/runtime_active_time -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/control -VALUE : auto
File : /sys/class/vtconsole/vtcon1/power/async -VALUE : disabled
File : /sys/class/vtconsole/vtcon1/power/runtime_usage -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/runtime_status -VALUE : unsupported
File : /sys/class/vtconsole/vtcon1/uevent -VALUE :
File : /sys/class/vtconsole/vtcon1/name -VALUE : (M) frame buffer device
Второе обновление:
Осмотревшись, я обнаружил, что DPMS и другие полезные настройки, связанные с энергосбережением на виртуальных терминалах, можно контролировать с помощью команды setterm
.
В случае, если ваши виртуальные терминалы кажется, что они спят, вы можете попытаться разбудить их (если это так), отправив им команду setterm --reset
.
Чтобы отправить команду со своего обычного tty7 на другой tty, вам необходимо использовать:
setsid bash -c 'exec setterm --reset / dev / tty1> & 0 2> & 1 '
Единственная проблема в том, что вы должны войти в систему на tty1.
Для тестирования вы можете использовать
setsid bash -c 'exec setterm --reverse on / dev / tty1> & 0 2> & 1'
и пока ваш tty1 работает, если вы переключитесь на него с помощью chvt 1
, вы можете наблюдать результаты (обратное переключение цветов в терминале - проверено и работает в Debian).
Кроме того, setterm дает вам возможность включить / отключить энергосбережение с помощью setterm --powersave off
и многих других (см. man setterm
)
Насколько я понимаю, ваши файлы примеров не содержат совпадений того типа, который вы описываете.
Если мы изменим первый файл на
CHROM POS ID
chr7 78599583 rs987435
chr15 33395779 rs345783
chr1 189807684 rs955894
chr20 33907909 rs6088791
chrx 1234567 rsMadeUp
chr12 75664046 rs11180435
chr1 218890658 rs17571465
chr4 127630276 rs17011450
chr6 90919465 rs6919430
так, чтобы выдуманная запись попала в диапазон
genename name chrom strand txstart txend
CDK1 NM_001786 chr10 + 62208217 62224616
CALB2 NM_001740 chr16 + 69950116 69981843
STK38 NM_007271 chr6 - 36569637 36623271
YWHAE NM_006761 chr17 - 1194583 1250306
SYT1 NM_005639 chr12 + 77782579 78369919
ARHGAP22 NM_001347736 chr10 - 49452323 49534316
PRMT2 NM_001535 chr21 + 46879934 46909464
CELSR3 NM_001407 chr3 - 48648899 48675352
, то
awk '
NR == FNR && FNR > 1 {snp[$2]=$3; next}
FNR > 1 {
for (p in snp) {if (p>=$5 && p<=$6) print $1, snp[p], $3, p, $5, $6}
}
' snpsid generef
YWHAE rsMadeUp chr17 1234567 1194583 1250306
Для этого можно использовать awk:
awk 'FNR==1 {next} FILENAME=="snipsid" {k++; POS[k]=$2; ID[k]=$2;} \
FILENAME=="gene" {i++; if(POS[i]>=$5 && POS[i]<=$6) \
print $1, ID[i], $3, POS[i], $5, $6} \
' snipsid gene >out_file