Это проблема не с настоящей клавиатурой, а с поддельными событиями клавиш, посылаемыми xfce4-power-manager
.
xfce4-power-manager
подделывает фиктивные (код клавиши 255, не назначен) события клавиатуры (нажатие клавиши с последующим ее отпусканием, каждые 20 секунд, согласно источнику), чтобы убедиться, что экранная заставка не включается в режиме презентации (обычно, когда вы смотрите фильм или проводите презентацию).
Это поведение было добавлено в 1.5.2 (последний выпуск по состоянию на 2015-01-06) для исправления этой ошибки, чтобы отключить все возможные типы экранных заставок в режиме презентации.
Это имеет тот побочный эффект, на который вы повлияли, и который был уже отмечен в этой ошибке.
Таким образом, вы захотите оставить этот режим презентации, чтобы избежать проблемы. Этот вопрос, вероятно, следует поднять как ошибку в xfce4-power-manager, чтобы это изменение было отменено или было найдено лучшее исправление #11083.
Не менее интересно, чем объяснение проблемы, то, как мы в итоге нашли виновника:
xinput test-xi2 --root
Сообщает обо всех событиях ввода X, сообщая нам их источник и природу. Что привело к следующему:
EVENT type 13 (RawKeyPress)
device: 5 (5)
detail: 255
valuators:
EVENT type 14 (RawKeyRelease)
device: 5 (5)
detail: 255
valuators:
Это нажатие клавиши с последующим событием отпускания клавиши для кода 255, исходящее от устройства 5.
xinput list
позволяет нам определить устройство ввода:
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Это устройство id=5 является виртуальным устройством, которое действует как источник для программно сгенерированных событий, которые вы можете генерировать с помощью:
xdotool key x
или
xte 'key x'
Если вы запустите эту команду xte
под ltrace
, вы заметите, что она делает:
XStringToKeysym(0x7ffed76983e0, 0x7ffed76983e0, 0, 0x7f34e491deb0) = 120
XKeysymToKeycode(0x23abfe0, 120, 120, 0x7f34e4ce7139) = 53
XTestFakeKeyEvent(0x23abfe0, 53, 1, 0) = 1
Это XTestFakeKeyEvent является стандартным X API для отправки этих событий нажатия клавиш.
Теперь мы хотим узнать, что посылает эти 255 событий нажатия клавиш. Мы можем попытаться найти, какие из запущенных в данный момент приложений используют этот API.
sudo lsof -Fn -nPd txt | sed -n '/proc/!s/^n//p' | sort -u | xargs grep -l XTestFakeKeyEvent
Или его более надежный эквивалент:
sudo lsof -Fn -nPd txt | sed -n '/^n\/proc/!s/^n//p' |
sort -u | xargs -d '\n' grep -l XTestFakeKeyEvent
Перечислите файлы, которые в настоящее время открыты и отображены как исполняемые (txt
) для любого процесса (это включает библиотеки и исполняемые файлы) и поищите в них XTestFakeKeyEvent.
Это вернуло xfce4-power-manager.
Оставалось только посмотреть в исходниках, почему этот процесс делает эти XTestFakeKeyEvent.
Аналогичный вопрос о stackoverflow (, в котором использовалась java вместо wget, но на самом деле основная проблема связана с синтаксисом URL, который, как мы надеемся, -не зависит от языка ), был решен путем добавления еще одной косой черты и URL -кодирование вот так:
wget -m ftp://user:pass@192.168.1.1/%2Ffoo/bar/
У меня работает и без кодировки, только с лишним слэшем:
wget -m ftp://user:pass@192.168.1.1//foo/bar/
Первая косая черта отбрасывается (и служит только разделителем между хостом и путем ), а вторая косая черта фактически считается частью пути.
Вы должны иметь возможность загрузить определенный каталог, используя wget
вот так:
wget -m 'ftp://[user]@192.168.1.1/%2ffoo/bar' -O /foo/bar
Я бы не стал указывать ваш пароль в URL-адресе, так как он появится в вашей истории bash. Эта команда, конечно же, означает, что /foo/bar
находится вне /
и больше нигде. Если /foo/bar
находится за чем-то вроде /var/www
, вам нужно будет указать полный путь в команде.
Насколько я понимаю, вы используете UNIX -, основанный на /usr/user
, поэтому могут быть различия в функциях конкретной реализации wget
, которую вы используете.
Вот альтернатива с использованиемcurl
:
curl -u [user] 'ftp://192.168.1.1/%2fpath/to/foo/bar' -o /path/to/foo/bar
Пожалуйста, прочтите эти ссылки:
URL-адреса FTP
Как использовать wget
Использование wget для рекурсивной загрузки каталогов FTP
Загрузка с помощью wget в каталог, отличный от текущего каталога
Как указать местоположение с помощью wget?
Загрузка файла с FTP с помощью cURL
Пожалуйста, прокомментируйте, если у вас есть какие-либо вопросы или проблемы с этим ответом. Я настоятельно рекомендую вам внимательно прочитать каждую ссылку, которую я предоставил, прежде чем пытаться использовать команды. Я ценю обратную связь, чтобы исправить любые неправильные представления и улучшить мои сообщения. Я могу обновить свой ответ по мере необходимости.
Удачи!