Как стать автором
Обновить

Комментарии 118

Я давно работаю с Linux и у меня бывали случаи, когда думаешь «что за чертовщина!».
Однако, каждый раз, когда я пытался разобраться в этой чертовщине, то всему находилось вполне логичное объяснение, и обычно выходило, что я сам не прав.
Затрудняюсь сказать, что именно у вас там происходит, но вероятно, вы не правы.
Ядро Linux очень стабильное и очень правильное.
Я даже скорее допущу, что баг в вашей клавиатуре и ее саму нужно чинить.
У вас есть аппаратный USB анализатор? Вот им бы посмотреть что на самом деле происходит…
Анализатор есть, и он показал, что на токен IN наша клавиатура отвечала ACK, но пакет DATA не передавала, то есть это точно наша ошибка. При этом Л не передавал ни одного пакета до окончания кадра, далее ситуация повторялась. Windows через некоторое время передавала очередной пакет для других устройств и повторяла запросы к строковому дескриптору в следующем кадре 3 раза, после чего прекращала их.
Вам нужно клавиатуру менять или чинить.
Если у устройства нет данных для ответа на токен IN, то оно все равно должно ответить DATA пакетом, даже пустым. Тогда контроллер вам пришлет ACK.
Насколько я помню, должно быть так:
SETUP
->Setup
<-Data0
->Ack
IN
->In
<-Data1 (no data)
->Ack
OUT
->Out
->Data0 (no data)
<-Ack

На токен In клавиатура имеет право ответить только пакетом Data0/Data1 и ни в коем случает не Ack. Аck пошлет клавиатуре хост, если принятые им данные Data корректные по CRC

Если логика USB у устройства не верная, то чего ожидать от Линукса?

Конечно же, логика у устройства неверная, я уже об этом написал. Но подобные ситуации стандартом предусмотрены и завешивать ВСЕ устройства — это неправильно.
Не знаю, что вы называете «завешивать все устройства», но с моей точки зрения, порт на котором обнаружено багованное устройство лучше отключить для предотвращения более опасных ситуаций типа конфликтов на шине, сильное потребление тока и т.д.
Возможно, то, что вызывает у вас такое негодование на самом деле сделано умышленно, для сохранения жизнеспособности системы при обнаружении устройства с багом в протоколе USB.
Под завешивать все устройства я подразумеваю прекращение любого обмена по шине, в том числе с нормальными устройствами на время принятия решения по багованному устройству — около 10 секунд…
А с багованным устройством можно поступать, как захочет хост, в том числе отключать его и с этой точки зрения к Л претензий никаких нет и быть не может.

Владелец уранового лома предъявляет претензии производителям унитазов в вагонах РЖД.
Ашотакова?

А то такого, что стандартом на USB данная ситуация предусмотрена и все, что требовалось от Л — это реализовать требования стандарта в полном объеме, тогда урановые ломы не страшны.
  1. Про стандарты (POSIX, например) лучше в техподдержку Microsoft написать. Можно узнать много нового.
  2. Про "не страшны" — это к ОС РВ (ОС Реального Времени).
  3. Не стоит натягивать сову на глобус поведение отдельно взятой подсистемы отдельно взятой реализации ОС с отдельно взятой железкой на качество самой ОС.
Хотел бы услышать Ваше мнение, что еще может характеризовать качество самой ОС, кроме «поведения отдельно взятой подсистемы отдельно взятой реализации ОС с отдельно взятой железкой»?

Ну, например, когда неудачно выбранный видеодрайвер валит ОС в BSOD, откуда оно уже никогда не возвращается. Потому что работа с графикой глубоко впаяна в ядро.
Или, например, когда неудачный веб-браузер (IE) технически невозможно выпилить из ОС даже силами самих разработчиков. Потому что он глубоко впаян в ОС.
Это — неудачная ОС, потому что сама архитектура неудачная. И изменить это невозможно.
А удачная ОС состоит из кубиков. Которые вы можете сложить так, как посчитаете нужным (если захотите). И если один кубик поломается всё здание не сложится.
Вы же кернел паник не поймали? Дисковая подсистема продолжает работать? Буквы на экране бегают?
А если что не нравится — пересоберите под себя, ради бога. Вам даже за нарушение лицензии никто не предъявит.

Монолитное ядро — это у вас кубики?
Рискну быть заминусированым, но если так рассуждать то добавления дров от мыши 2004 года в ядро в 2020 — тоже неудачная архитектура.

Ну есть insmod/rmmod/modprobe. Так что монолитность довольно условная.
Кроме того, вы реально можете сконфигурировать и собрать свое ядро из нужных вам кубиков.

Для перфекционистов есть Debian+Hurd.
На другом конце — можете хоть кеды в загрузочный образ вкомпилить.
Можете вкомпилить дрова в ядро — можете загрузить как модуль — можете вообще не загружать.
У вас есть выбор.
PS. я буду читать камменты

И да — какие претензии к мышу 2004 года? Что за расизм?
Я вот сейчас пишу с машины с процессором выпуска Q1'04 (P4 3.0GHz). Мне застрелиться?

НЛО прилетело и опубликовало эту надпись здесь
У меня есть несколько старых устройств, которыми я всё ещё иногда пользуюсь, некоторые вообще прошлого века, и большое спасибо, что они всё ещё присутствуют в ядре. В виде модулей, конечно. А вот в Windows я ими воспользоваться не могу, ибо производители на драйвера давно забили.
О, как я вас понимаю! За давностью лет не помню всех деталей, но у меня вроде бы тоже строковой дескриптор устройство не отдавало, при запросе перезагружалось. При этом венда этот дескриптор не просила и устройство работало. На такой случай, есть USB_QUIRK_CONFIG_INTF_STRINGS, который надо прописать в drivers/usb/core/quirks.c ;-)
Вот, какая плохая ОС — приходится аж какую-то там строчку в файлик записывать! :) А в винде просто ждёшь три года, когда обновят драйвер — и порядок.

Исходя из адреса файлика для строчки, предположу что ещё и ядро пересобоать, но в любом случае это лучше чем ничего.
Другое дело, что возможно, можно было бы заложить вероятность такого бага в устройстве, что возможно, и сделали в МС.

Все зависит от точки зрения.
Одна точка зрения — запустить устройство во чтобы то ни стало, лишь бы хоть как-то заработало. Вторая точка зрения — если есть подозрение, что в устройстве баг, то заблокировать его и не использовать от греха подальше.
Обе точки зрения имеют право на существование, но что более правильно?

Исходя из того что написано в статье, выходит что оно не отключается, а подвешивает систему, если это действительно так то это самый неудачный вариант, на мой взгляд.

Статья слишком эмоционально окрашена, в ней нет фрагментов кода прикладной программы или каких-то скриншотов. Все одни эмоции.
Я вот думаю, что видимо они сами делают свою кастомную клавиатуру и что-то там намудрили со своей реализацией USB, а признавать свои ошибки не хотят — грешат на Линукс.
Ну прочитайте все таки, там все написано. Да, при проектировании кастомной клвиатуры была допущена ошибка (я 3 раза об этом написал в разных местах), но обработка данной конкретной ошибки в Л драйвере сделана не в соответствии со стандартом USB, что и привело к откровенно неудачному поведению системы. Свою ошибку в первой части мы признали, исправили и далее все заработало нормально.
А вот вторая часть — целиком и полностью на совести Л, поскольку анализатор шины показывает, что состояния обоих клавиатур прочитаны, значит, теряется отжание клавиши в недрах ОС.
Хм… ну хоть что нибудь покажите из ваших изысканий! Ни скриншотов, ни фрагментов вашего кода (как вы читаете события клавиатуры — а читать события клавиш можно в Linux многими разными способами), ни протоколов USB анализатора, ни даже версии вашей Linux мы не знаем. Какое железо? Линукс он знаете работает и на Raspberry Pi и сотовом телефоне и в точке доступа Wifi и в платах FPGA на кастомных процессорах.
В общем беспредметный разговор…
Так не только ведь записывать, а пересобирать ядро с ним. Это так просто?
С реверс-инженерингом драйвера не сравнится.
Суть статьи:
  • на конкретном примере X я обнаружил, что поведение системы Y не соответствует моим ожиданиям, а поведение системы Z меня устраивает;
  • как будут вести себя эти системы на другом конкретном примере N, я даже не задумываюсь и в расчет не беру;
  • то, что поведение системы Y можно изменить, приложив определенные усилия, а поведение системы Z — нельзя, тоже в расчет не беру;
  • несмотря на эти мои «в расчет не беру», я считаю, что система Y — говно плохая, а система Z — конфетка хорошая;
  • невзирая на пункт в правилах «не следует путать хабр с жалобной книгой», свои переживания и выводы я изложил в статье
1а. На конкретном примере я обнаружил, что система Х ведет себя неправильно (это я про второй эпизод, не-отжатие клавиши — это неправильно).
1б. Система У ведет себя правильно, значит реализовать правильное поведение возможно.
2. Другие конкретные примеры можно не рассматривать, ошибка уже имеет место быть.
3. Поведение системы Х, может быть, удастся изменить, хотя процесс не так прост, как нам говорят, поведение системы У в данном случае в коррекции не нуждается.
4. Делаю вывод (на мой взгляд, обоснованный), что система Х в данном конкретном аспекте не столь хороша, как система У.
5. Нисколько не предполагая, что Хабр внимательно читают контайнеры системы Х, ни в коем мере не рассматриваю свой пост, как жалобу, но скорее склонен предполагать, что это предостережение тем читателям, которые считают систему Х абсолютно надежной.
«Неотжатие клавиши» — хм… думаю этому тоже найдется простое и логичное объяснение. Просто вы искать не хотите. Возможно это опять же баг вашей программы. Вы на чем пишите программу? Точно ли она у вас кроссплатформенная и обработчик нажатий точно одинаков в линукс и виндовс? А то может эти обработчики написаны по разному и соответственно ведут себя по разному.
Я пожалуй повторюсь — Linux очень хорош, если что-то не работает — ищите ошибку в своей программе, врядли ошибка в ОС.
Ну можно попросить Вас прочитать статью? Есть 2 клавиатуры, подключенные по USB к компьютеру, они вполне себе работают, но при одновременном нажатии двух одинаковых кнопок на разных клавиатурах иногда клавиша считается постоянно нажатой после отпускания. Происходит авто-повтор, причем не в нашей программе, а в любом окне, в том числе в консоли (хотя я об этом не написал, извиняюсь). Каким боком тут может быть наша программа, я не понимаю. Если на том же железе запустить Винду, то все отрабатывается нормально.
:) Эх,
если бы Вы написали не просто какой-то Linux, а например AstraLinux, то реакция Ваших оппонентов вероятно была бы другой
Ну, вообще то, это как Астра и был :)
А что-нить поприличнее не пробовали ради интереса? Дебиан там какой или Арч? Чисто для сравнения, что проблема именно общая, а не в Астре.
Сколько было случаев когда Виндовс(любая) не работала(как надо) с оборудованием даже крупных производителей(разработанного по всем стандартам)?
Разные диструбутивы Linux по разному работают с оборудованием(как стандартным так и не стандартным). Прежде чем обижать бесплатное программное обеспечение после неудачного опыта подключения к нему нестандартного оборудования(слепленного на коленке «абы як») нужно просто подумать о ком то кто может все это настроить(всего один раз). И практика показывает что после этого Linux работает много много лет без сбоев, в отличие от поделки БГ. не могу писать чаще раза в сутки, но да, я знаю где ваша ошибка.
Так я и не спорю, что такое бывает. У меня была ситуация, когда Виндовс ОЧЕНЬ медленно работал по сети с МК устройством, на котором крутилась программа с использованием Uip, причем Линукс работал замечательно. Оказалось, что в Винде по умолчанию принят размер кадра в 2 пакета, который Uip никак не поддерживает, пришлось править конфиги.
Я никак не против Линукса, но не все так просто…
Линух, да, бывает косячит. Однако, в отличие от мелкомягкой поделки, поддается починке/допиливанию. Если что-то не работает в линуксе — чиним, если что-то не работает в винде — аминь, идем покупать то, что в ней работает.
Видите ли, я тоже верил, что так оно и есть, но в данном конкретном случае при попытке разобраться с причинами пришлось столько лазить по исходникам и попасть в такие дебри, которые я хотел бы «развидеть». Возможно, в следующий раз мне будет легче, но первое (вообще то, второе, я уже туда лазил) знакомство с исходными кодами Л меня скорее огорчило, нежели обрадовало.
Дык это потому что у вас напрочь не массовый случай. Вы первый нашли этот баг, до вас его никто не встречал. Логично, что редкий баг чинить сложнее и дольше, чем массовый.
В случае с виндой это был бы тупик.
callidus77:
Помница в нашей сетке монтажники подключали абонента. Пришли, воткнули сетевуху, а у него Фря и дров нету. Почесали головы и ушли. Чел через три недели наконец-то коннектится.
Грят: «Долго ж ты искал дрова.»
Он: «Я не искал. Я их сам написал.»


Отсюда. О чём ваш пост мне непонятно. Если вы нашли проблему в ядре, так исправьте её. Что ныть?
Видимо, у чувака слишком много свободного времени, и он его не ценит.

В 2005 это был единственный путь. Ну и плюс, опыт. Бесплатное обучение. Наоборот очень ценит время

А если он этими дровами ещё и с остальным миром поделился — ему ещё и спасибо сказала куча народу.

Ха, а у меня как-то давно была ровно такая же ситуация, как в той цитате с башорга — FreeBSD и новенькая модель интеловой сетевухи.


Я, правда, всего-навсего добавил PCI ID в список поддерживаемых драйвером em, на ближайшую модель, и все заработало.

Я нашел проблему в поведении ОС, если бы я нашел конкретную проблему в текстах, то, наверное, исправил бы ее.
Вы, вообще то, пробовали что-либо исправлять в ядре Л, смотрели исходные коды? Я — смотрел, и с тех пор на фразу «Так исправьте ядро» смотрю с большой настороженностью.
Вы, вообще то, пробовали что-либо исправлять в ядре Л, смотрели исходные коды?
Посмотрите мои публикации, и после этого задавайте вопросы. Вёл курс по модулям ядра.

Ваша статья бесполезна, вместо того, чтобы создать баг, если у вас нет опыта, желания и возможности исправить, хотя бы написали бы в рассылку. Но вы вместо этого накатали статью и начали ныть, попутно обливая грязью инструмент, которым вы не умеете пользоваться.
НЛО прилетело и опубликовало эту надпись здесь
Конечно же, нет, я об этом написал во второй части (которая еще не опубликована), когда разбирался с причинами. Я просто не умею это делать, никогда не приходилось.
Т.е. вы бесплатно пользуетесь трудом тысяч человек, но вам лень помочь им, разобравшись хотя бе с тем как репортить об ошибках? Лично я вообще исповедую принцип «разобрался в проблеме — засабмить патч». Благо в Linux это в принципе возможно. Но я понимаю что не все готовы возиться с процессом upstream.

Тем не менее, открыть файл MAINTAINERS и написать в linux-usb@vger.kernel.org описание проблемы — не так уж и сложно. Тем более, что вы в принципе уже разобрались с проблемой.

И вообще, раз уж ваше устройство ведет себя некорректно — добавьте соответствующий quirk как писали выше. Естественно, что разработчики ядра ничего не могут знать об «особенностях» вашей конкретной железяки.

В конце концов, можно в исходниках поправить и собрать "для себя любимого" уникальное ядро без этого бага

Не царское это дело — багрепорты писать.
Тем более бесплатно (даже плюсвкарму не дадут).

Тем более бесплатно (даже плюсвкарму не дадут).

Могут добавить тег Reported-by к патчу.

Такое даже в резюме бесполезно вставлять.

Ото ж..


Багрепорт наколпашить — "яжнепрограммист".
А трассировать USB и полотенце на хабре нарисовать — как два пальца.

Претензии не по адресу, ИМХО, вы тот человек, которому нужно исправить поведение Л в данном случае, Вам это и проталкивать. Т.е. винить Вам нужно самого себя.
То есть, по Вашему мнению, желание иметь правильную обработку двух одновременных событий на двух разных клавиатурах — это каприз конкретного пользователя? Сильное утверждение, требует доказательства.
Да, каприз, так как сценарий не стандартный. Подавляющее большинство живет без этого. И баги в первую очередь ищутся и фиксятся те, которые мешают жить большинству, а не единицам.
Подавляющее большинство живет с одной клавиатурой и не набирает текст на двух одновременно, но это не повод небрежно писать обработчик событий от нескольких устройств, по крайней мере, Винда обрабатывает их аккуратно.
Винда косячит в тысяче других мест и это нельзя поменять. Тут же косяк хоть и присутствует, но поддается лечению. То, что авторы не учли, что вам приспичит такой сценарий — не их вина. Кстати, а у вас есть ссылки на какие-нить спецификации, которые авторы ядра нарушили этим багом?

Не повод, но увы, другого художника небыло, спасибо тому кто написал хоть так (даже если на з.п. от какой-то крупной компании), и спасибо вам что подробно описали проблему, даже если вы не зарепортите баг, кто-то может прочитав статью сделать это, а возможно кто-то и исправит.

Не могу не сказать спасибо человеку, который понял смысл моего поста, а то я уже думал, что пишу настолько плохо. К сожалению, Вы оказались в меньшинстве, большая часть комментаторов увидела только наезд на святое «Как только можно не падать на колени в молитве перед святым Л» — да, можно, но для меня не святой.
Так Вы же сами выбрали такой стиль изложения. Линукс, безусловно, не святой, и в нём куча багов. Но Вы столкнулись с одним, котрый проявляется в весьма нетипичной ситуации (попробуйте руками нажать одинаковые клавиши на разных клавиатурах столь же одновременно) — и на основе этого делаете обобщение, что Л — плохо, а В — хорошо. Уверяю Вас, там тоже есть баги. И, если Вы читали EULA, MS не обязуется их исправлять по первому требованию. Но, в отличие от Л, сами Вы тоже этого сделать не сможете.
Статья не очень мотивирует тратить время на решение экзотических проблем автора, поэтому не уверен, что кто-то этим займётся. Разве что кто-то из молодёжи, дабы доказать, что Linux вообще ничем не хуже Windows.
так как сценарий не стандартный

На самом деле достаточно стандартный. Ниже писал, как некоторые клавиатурные производители боролись с проблемой множества нажатых клавиш на USB клавиатуре, представлясь сразу несколькими клавиатурами. Моя механика так делала, но в Linux работала отменно.

ну значит эти производители сделали не так, как автор поста, раз у них все работало в массовых масштабах

Кстати, не настолько нестандартный: когда делают самопальные педали их обычно в дескрипторе описывают как клавиатуру.

на педалях аналоговый сигнал.

Не всегда, эти, кстати, часто прописывают как джойстик. Бывают педали для расширения клавиатуры, например чтоб забиндить прыжок или смену оружия в играх. Ещё я видел педаль для автокомплита в IDE, передала не один символ, а комбинацию-хоткей.

Я не имею в виду каприз. Я имею в виду то, что в свободном софте превалирует подход, что тот кому нужно что-то, тот и отвечает за это.
Собственно и в платном софте почти так.
То есть, никто ни за что не отвечает.

Так с Шиндоус вы вообще заявите "я вам деньги заплатил, так что даже подробностей вам не скажу, но хочу, чтобы прям сейчас всё работало, как надо"?

я не так давно пользуюсь Линуксом, вроде все стабильно
Так я достаточно экзотические случаи описываю — две клавиатуры (у Вас она, скорее всего, одна) и одновременное нажатие/отпускание на обоих (даже подключив две клавиатуры, Вы вряд ли сможете такого стабильного совпадения добиться), они далеко не у каждого происходят, а в стандартных ситуациях Л вполне не плох.

Я правильно понимаю, что вы нашли багофичу в ядре и на основании одной багофичи делаете вывод о всей ОС?


Скажите, а если бы вы за проприетарную ОС заплатили, в ней не было бы багов?

Я сделал вывод о всей ОС? Не заметил.
И да, Вы таки правы, количество багов в ОС совсем не однозначно определяется ее стоимостью, но тенденция к их уменьшению по мере роста стоимости, скорее всего, должна иметь место.
Должна, но не имеет

Цена на ПО определяется не его качеством, а тем, сколько за него можно попросить. Многие $многомиллионные (за копию) продукты такие вырвиглазные и багованные, что только ой. Почему? Потому что компания платит деньги за фичи, а не за удобство. Компаний мало, цена гигантская, а пользователи потерпят (так как цена гигантская, потратить месяц на обучение сотрудника как тривиальную вещь в ней сделать — ерунда).

Да, вы сделали вывод о всей ОС.
Цитирую:
"Ну, вообще то, я никогда не испытывал к нему столь сильных чувств, просто начинаю лучше понимать, за что фирма, производящая Окна, берет деньги. И становится яснее, почему потребители предпочитают платить Биллу (тут, конечно, есть варианты, ну Вы поняли), вместо того, чтобы воспользоваться бесплатной («то есть даром») альтернативой."

"К вопросу о Linux (Л)"

Я сделал вывод о всей ОС? Не заметил.

Ну как Вам сказать...

Кстати, мысли вслух. Если бы статья была написана о том же баге, но в ключе «смотрите, с чем мы столкнулись и как починили», то реакция читателей была бы строго положительной.

Ученье — свет. А за свет надо платить. © "Петроэлектросбыт"
Наблюдаем процесс оплаты самообучения рейтингом и/или кармой.

Почему вместо описания решения проблемы, вы просто ноете высказываете мнение?
А высказывать мнение на Хабре уже запрещено? О кривых особенностях языков программирования высказывают, о кривом железе высказывают, о кривых библиотеках высказывают, почему нельзя высказать мнение о кривой ОС?

Можно, конечно.
Проблема в излишнем обобщении поведения отдельно взятого кривого железа до "кривой ОС".
Вот прямо до тотальной кривизны прямо всей ОС.

Можно, но для нормального обвинения в кривости тут маловато аргументов.
Своё мнение по этому вопросу можно было бы сократить и добавить в это место технические подробности непосредственно решения. Статья приобрела бы совсем другой оттенок.
Как может отреагировать хост под управлением вменяемой ОС в случае подключения к нему подобного неправильного устройства?

И как же прореагирует Windows? :-)


Необычайно оригинальное решение, но это (оригинальность) его единственное достоинство.

Talk is cheap. Show me the code. Если серьёзно, не хватает ссылки на отчёт об ошибке.


предложили пересобрать ядро с последними патчами, это вообще в Л сообществе универсальный ответ на любое сообщение о возможной ошибке

Серьёзно??? Я только на заре знакомства с Linux этим баловался, годах в 1999-2002. Да по работе, когда нужно дополнительные драйвера
включить или подтюнить что-то (embedded). Да, совет проверить на более новой или старой версии ядра возможен (например, для Ubuntu, но только для проверки!), но пересобирать...


в данном случае сообщение об отпускании кнопки.

Хммм… Нет там события на отпускание кнопки. Передаётся только текущее состояние нажатых клавиш. Хост, сравнивая новую и предыдущую посылку считает дельту и делает заключение, какие новые кнопки были нажаты, а какие были отпущены и уже после генерирует аналоги KeyUp/KeyRelease.


Окнах7 данный дефект не наблюдался на протяжении по меньшей мере 100 нажатий

См ссылку выше )))


И, кстати, по ходу, из-за косяка в Windows XP или около того, которые работали с HID клавиатурой только в режиме BOOT протокола, появилась проблема с максимальным количеством нажатых клавиш в 6 штук (посылка 8 байт, но, пишу по памяти, один байт на состояние клавиш типа CTRL/SHIFT/ALT, а второй — не помню). Диктовалось это тем, в таком режиме можно не заморачиваться разбором Report'ов. При том, что даже через EP0, можно посылку передать до 64 байт, если устройство определить как high-speed и ограничиться 8 байт только для low-speed режима. Да, есть ограничение на максимальный размер, но… сможете единовременно нажать ~60 клавиш?


В результате появлялись монстры, представлявшиеся как композитные устройства из нескольких HID клавиатур. Которые слали каждый свою порцию данных. Спасибо Виндосу за это.


Или просто взять драйвера. USB3 ощутимо стабильнее и производительнее работает на Linux. По крайней мере в части UVC.


Если что, утверждения не голословный, накушался много и на Винде и на Маке и на Линухе, пока делал это, это, это и это.


А вообще, тема BadUSB обширна, и Linux там не в лидерах.

Автор знает, как работает HID клавиатура (и про максимум 6 нажатых клавиш, это прямо прописано в стандарте, не знал, что Винда к этому причастна, может все таки скорее IBM?), и в посте было упомянуто некое абстрактное сообщение об отпускании клавиши, но никак не конкретное сообщение от USB устройства.

Я выпад про "не знает" выпилил, вы уж извините. Нервишки :)


и про максимум 6 нажатых клавиш, это прямо прописано в стандарте, не знал, что Винда к этому причастна

Нет, вы меня не поняли. Стандарт HID регламентирет два режима работы, который распространяется на мышь и клавиатуру, это Boot и Report.


Первый режим был затеян с той целью, что бы облегчить реализацию поддержки USB клавиатур в BIOS, иными словами он позволяет игнорировать дескрипторы, которые описывают формат посылки и накладывают жёсткое ограничение на размер посылки в 8 байт, как минимально возможный для Low Speed. Формат этой посылки также чётко определён. Т.е. хост:


  1. может позволить себе не разбирать HID дескрипторы
  2. не переводить клавиатуру/мышь из Boot (по умолчанию) в Report режим
  3. всегда рассчитывать на посылку в 8 байт с чётко определённым форматом

Но вы ограничены при этом в 6 символах за посылку.


Report режим позволяет вам самим описать HID дескрипторами то, что будет в посылке от клавиатуры и размер оного. Хост, если перевёл устройство в Report режим (и, естественно, если устройство согласно на это), обязан следовать вашим декларациям и обрабатывать соответственно. По крайней мере я смеха ради делал посылки 60 клавиш на Linux, работало :) На SS режиме, можете вообще до 1024 байт передать, т.е. ВСЕ клавиши сразу, и ещё несколько раз постольку же сверху.


Т.е. моё утверждение выше основано на том, что реализация поддержки USB/HID клавиатур в Windows была сделана и оставалась долгое время крайне топорной, работая с клавиатурой только в режиме Boot протокола, что вызвало появление проблемы, по сути, на ровном месте. И серию мужественных решений оной. Сейчас, вроде, Windows может разобрать дескрипторы и нормально интерпретировать более 6 клавиш в посылке. Но не уверен.

Ну если так, то понял, тогда Винда действительно виновата, что навязывался только один, причем не самый удобный, вариант репорта.
Сейчас она (по крайней мере у меня) работает с любыми типами репортов, хотя BOOT режим все равно приходится поддерживать, что бы в BIOS работать.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Контроллеры висят на разных USB портах, хотя, конечно, через один корневой хаб.
Если б Вы потратили своё время не на эту статью, а на багрепорт или патч, лучше было бы всем. Кроме, может быть, Билла Гейтса. Честное слово.

Статья должна называться "К вопросу о новой бензопиле и суровых сибирских мужиках".

Что за прикол — хэйтить (минусовать) за то, что человек высказал своё мнение? У автора своя точка мнения, на основе своего опыта. Подскажите ему как улучшить опыт и посочувствуйте, по доброму. :)

На минуточку — минусовали (не хейтили — именно минусовли) статью, а не автора.
Это типа "я не согласен с мнением автора в данном вопросе" (там даже и причины указать можно).
А вот самого автора (его карму) не трогали, насколько я успел заметить. Стоит, как у молодого.
Ну или почти не трогали (придурки везде есть).
То есть к автору претензий нет — есть оценка данного конкретного его высказывания. Он сказал "фэ" линуху — линухоиды сказали "фэ" его "фэ" (ограничился бы одной подсистемой USB — глядишь и прокатило).
Что не так? )
PS. а вот за камменты против мнения автора может и в карму прилететь. Инфа — 146%. Вот это уже хейтинг.

Отнюдь.
Когда стартовало, было 9x. Визуальная память, точно не фиксировал — то ли 91, то ли 94, то ли аж 97 — но не 98 или 99 точно.
Вчера глубоким вечером было 91, это точно. Сейчас — 88. За статью с таким провокационным содержанием и желтым заголовком и недорого довольно.

В комментах как обычно. (Л) хороший, устройства плохие.
Ну, почему же? Да, реакция на подобный случай могла бы быть и поизящнее.

Но основная часть комментариев, в общем-то, не с этим спорит, а с тем, что автор в чересчур эмоциональной манере делает чересчур далекоидущие выводы только потому, что в этом микроскопическом случае ОС ведёт себя не так, как ему хотелось бы.

Более того — вместо того, чтобы, разобравшись в проблеме, отправить патч (а судя по статье — технических знаний у него для этого вполне достаточно) — он садится на попу ровно и начинает высказывать претензии. Очень конструктивно, что сказать…
Дело в том, что моих знаний пока не хватило. Я неделю (в свободное время, часа по 2 в день) пытался пробиться через многослойную обработку клавиш, чтобы обнаружить точку дефекта, и пока не могу похвастаться успехом.
Во второй части поста я об этом думал написать, но только когда смогу найти дефект и предложить метод его устранения. Вот тогда я смогу высказать все, что думаю по поводу исходных текстов Л, поскольку мнение это не слишком понравится большинству комментаторов.
Почему то мне кажется, что подавляющее большинство предлагающих «исправить ошибку» исходники Л не открывали, не в обиду будь сказано.

Помню делал я дллку с реализацией эвент хуков, это такой милый способ легально через винапи пристроить свой кусочек кода ко всем процессам в системе. И с кривым кодом длл система периодически уходила в бсод, хотя казалось бы длл ка эта живёт в юзерспейсе.

Мы исходим из того, что вы получаете полноценную операционную систему, сразу полностью за все заплатив.
Но ведь это ложь. Что может голая винда? Да ничего почти. Скачивая сборку какого-нибудь минта/убунты вы получаете полноценную систему из коробки. С офисным пакетом, проигрывателем и тонной утилит. Ей уже можно пользоваться. А если чего-то не хватает. Ну как пример, из нового LM выпилили GIMP. Мне понадобилось ровно 50 (пятьдесят) секунд что бы его получить. ALT+F2 -> sudo apt install gimp. На винде это так не работает.

И да, заголовок никак не коррелирует с смыслом статьи. Подключая нерабочую клавиатуру которую необходимо либо поменять по гарантии либо выкинут, автор сетует на Linux. Странная логика. Очень.
Опоздал маленько, но:
let the srach begin!

Статья, кмк, откровенно плоха для хабра. Такое прокатило бы в lor/talks, но здесь было бы правильным показать кусочки исходников, приложить пару картинок с диаграммой взаимодействия, добавить ссылки на используемую спеку USB или развёрнутые цитаты из неё.
И ещё крайне желательно собрать всё это в кучу и послать баг-репорт автору подсистемы, просто потому что так устроено OSS-сообщество.

Даже если предположить что в обоих вышеописанных ситуациях виновата ось, делать вывод о том что она плоха лишь на этих основаниях — так себе вывод. И уж тем более на тех же основаниях делать вывод о том что другая ось хороша (кстати почему только Windows).
Пользуюсь линуксом с 2000 года. Мастдайку удалил со всех своих компьютеров в 2003. Полет нормальный.
А ТС — простая истеричка, у которой руки не оттуда растут!
Как разработчик могу объяснить почему все так:
1. Линукс точится преимущественно для серверов. Поддержка игровых контроллеров вообще за энтузиастами.
2. Когда какой-то разработчик устройства сталкивается с проблемой, то он пишет разработчику ОС. Чем больше разработчиков или чем они значительней (багрепорт от интел будет рассмотрен в первую очередь) пишет, тем быстрее проблема решается. Как думаете, под какую ос делают больше устройств?

Итак, производители игровых контроллеров в первую очередь пишут дрова для окон. Для линукса они их не пишут, за редким исключением. Поэтому, баги системы так и остаются неисправленными.

Что вам следует сделать:
1. зайти сюда bugzilla.kernel.org и написать баги по каждому случаю, предоставив логи ядра и прочую информацию. Когда начнется переписка, то активно ее поддерживать.
2. исправить самостоятельно, отправить патч в багзиллу или в почтовую рассылку. Этот метод быстрее.

Ой, та ладно, я больше чем уверен что, подавляющему большенству не нужно сразу две клавиатуры на одном компе, мне трудно даже представить для чего такая необходимость нужна, и этот "глюк" на Linux, по сравнению со всеми багами на Windows, ни что. Компилирует винда, допустим, Python, в разы медленнее чем Linux, а о стабильности и говорить не стоит…

Так на тои и Linux: нашёл баг — отправь фикс, или хотя бы bugreport (а лучше и то и другое). Разница тут в том, что в отличие от винды, ты можешь сам исправить найденный баг (и поделиться решением с другим).
Недавно вышло обновление стабильной ветки Debian. Среди прочего, MariaDB 10.3.18 -> 10.3.22.
После установки и перезагрузки (ядро тоже обновилось) БД не запустилась. В своих логах вообще пусто, в системных — «Aborted». Это в, казалось бы, эпоху journalctl.

Легко гуглится статья в доках MariaDB: «Что делать, если эта хрень не запускается?». Подробно рассказано, как найти файлы логов. Разобрано несколько случаев. Отдельно выделена глава для пользователей systemd (лично ничего против этого тулкита не имею).

Ничего похожего на мой случай. На «СтэкОверфло» советуют сделать «apt purge mariadb*». Серьёзно. И, что противоречит логике, переустановка чего либо очень часто решает проблему. Но меня такой подход не устраивает.

Ладно, ход поиска решения понятен.
Пробую запустить без старых файлов данных (mv /var/lib/mysql /var/lib/mysql.bak) — без результата.
Печально, у меня сильно кастомный конфиг, долго придётся искать несовместимость (хотя откуда она могла взяться?).

Пробую запустить Марию вообще без кастомных конфигов (кстати, концепция conf.d/ очень удобна, спасибо) — успешно стартует. Методом исключения по методу Монте-Карло нахожу какую бы вы думали проблемную опцию?

Я ставил на нестандартный порт из непривелигированных, параметры буфера и кэша InnoDB, увеличение лимита на количество открываемых файлов (в конфигах systemd тоже было в отдельном файлике установлено нужное значение параметра, которое ещё в интеренетах настоятельно рекомендуют не ставить в значение «nolimit», т.к. в каких-то версиях systemd это воспринималось как «65 тысяч сколько-то»).

Оказалось, дело в «lc_messages = ru_RU». Ну вы поняли.

Но всё равно, виндовый сервер считаю плохой идеей. BSD? Ну, за примерно год администрирования FreeBSD всякое случалось. «Из коробки» удобно не многое.
Оказалось, дело в «lc_messages = ru_RU». Ну вы поняли.
Мы поняли. Рафик Линукс не увиноват
Вы СУБД обновляете без тестового прогона на отдельном идентичном стенде, да ещё и с одновременным апдейтом ядра? Может, ещё и в продакшене? Ну ок.
Верил в репутацию Debian как стабильного дистрибутива)
Дебиан-то прекрасен. Я намекаю в основном на «самую популярную (но не самую стабильную, видимо) свободныю СУБД» :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории