Я новичок в Ubuntu и пытаюсь установить TL-WN722N. Я видел несколько руководств о том, как это сделать, но они, похоже, не прижились ...
Я видел, что он поддерживается ubuntu, я "lsub" его, и он распознает его, но я не могу заставить беспроводную связь работать.
Может ли кто-нибудь помочь мне шаг за шагом, как его установить?
Я использую Ubuntu 14.04 LTS.
Вот одно из руководств, которое я использовал: https://github.com/erickcion/tlwn722n-linux-install
Вот еще один: Как установить драйвер для TP-Link TL-WN722N в Ubuntu 14.04?
Это то, что lsus сообщил:
ernesto@Ernesto:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 046d:c52e Logitech, Inc.
Bus 001 Device 002: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Это то, что я получил после проверки, загружается ли драйвер автоматически:
ernesto@Ernesto:~$ lsmod | grep ath
ath9k_htc 75131 0
ath9k_common 25638 1 ath9k_htc
ath9k_hw 446521 2 ath9k_common,ath9k_htc
ath 29006 3 ath9k_common,ath9k_htc,ath9k_hw
mac80211 652718 1 ath9k_htc
cfg80211 494362 4 ath,ath9k_common,mac80211,ath9k_htc
Чтобы проверить беспроводной интерфейс, это появляется:
ernesto@Ernesto:~$ iwconfig
eth0 no wireless extensions.
lo no wireless extensions.
Журнал сообщений для wlan:
ernesto@Ernesto:~$ dmesg | grep -e wlan -e ath9k
[ 10.648823] usb 1-3: ath9k_htc: Firmware htc_9271.fw requested
[ 10.648931] usbcore: registered new interface driver ath9k_htc
[ 10.785561] usb 1-3: ath9k_htc: Transferred FW: htc_9271.fw, size: 11233
[ 11.783282] ath9k_htc 1-3:1.0: ath9k_htc: Target is unresponsive
[ 11.783296] ath9k_htc: Failed to initialize the device
[ 11.786525] usb 1-3: ath9k_htc: USB layer deinitialized
[ 9320.372981] usb 1-2: ath9k_htc: Firmware htc_9271.fw requested
[ 9320.514042] usb 1-2: ath9k_htc: Transferred FW: htc_9271.fw, size: 11233
[ 9321.512915] ath9k_htc 1-2:1.0: ath9k_htc: Target is unresponsive
[ 9321.512929] ath9k_htc: Failed to initialize the device
[ 9321.515984] usb 1-2: ath9k_htc: USB layer deinitialized
последний шаг ничего не сделал:
rfkill list all
Я проверил размер:
ernesto@Ernesto:~$ ls -al /lib/firmware/htc_9271.fw
-rw-r--r-- 1 root root 11233 abr 7 23:03 /lib/firmware/htc_9271.fw
Я переустановил прошивку, перезагрузил и проверил драйвер:
ernesto@Ernesto:~$ dmesg | grep ath9k
[ 11.820232] usb 1-2: ath9k_htc: Firmware htc_9271.fw requested
[ 11.820469] usbcore: registered new interface driver ath9k_htc
[ 12.224275] usb 1-2: ath9k_htc: Transferred FW: htc_9271.fw, size: 51272
[ 12.462132] ath9k_htc 1-2:1.0: ath9k_htc: HTC initialized with 33 credits
[ 12.739299] ath9k_htc 1-2:1.0: ath9k_htc: FW Version: 1.3
Без намного большей информации невозможно предложить решение. После того, как у нас будет больше деталей, я отредактирую этот ответ для добавления решения.
драйвер загружается автоматически, как ожидалось? Проверьте:
lsmod | grep ath
В противном случае попытка загрузить его и видеть, существуют ли какие-либо ошибки или предупреждения на терминале:
sudo modprobe ath9k_htc
, Если это загружается без жалобы, проверьте, чтобы видеть, был ли беспроводной интерфейс, идеально wlan0, создан:
iwconfig
, Если никакой wlan0 создается, посмотрите, имеет ли журнал сообщений какие-либо подсказки:
dmesg | grep -e wlan -e ath9k
Наконец, в некоторых случаях, беспроводной переключатель для внутреннего устройства будет препятствовать тому, чтобы беспроводная связь USB работала. Проверьте, чтобы видеть, останавливает ли переключатель USB:
rfkill list all
интересно, повреждается ли встроенное микропрограммное обеспечение. Я замечаю:
usb 1-3: ath9k_htc: Переданный FW: htc_9271.fw, размер: 11233
Однако в моей системе, размер отличается:
-rw-r--r-- 1 root root 51272 Nov 24 10:42 /lib/firmware/htc_9271.fw
отредактируйте свой вопрос добавить результат:
ls -al /lib/firmware/htc_9271.fw
, Если это не имеет размера 51272, давайте переустановим микропрограммный пакет:
sudo apt-get install --reinstall linux-firmware
Тогда перезагрузка и проверка:
dmesg | grep ath9k
С более подробной информацией, мы продолжим двигаться.
Я сказал бы, что состояние в целом не является запахом кода, пока это сохранило маленьким и хорошо управляемым.
Это означает, что с помощью монад, таких как состояние, ST или произведенные по заказу, или просто имея структуру данных, содержащую данные состояния, которые Вы раздаете к нескольким местам, не являются плохой вещью. (На самом деле монады являются просто помощью в выполнении точно этого!) Однако имеющий состояние, которое идет повсеместно (да, это означает Вас, монаду IO!) неприятный запах.
Довольно ясный пример этого был, когда моя команда работала над нашей записью для ICFP, Программирующего Конкурс 2009 (код доступен в git://git.cynic.net/haskell/icfp-contest-2009). Мы закончили с несколькими различными модульными частями к этому:
Каждый из них имеет свое собственное состояние, и они все взаимодействуют различными способами через входные и выходные значения VM. У нас было несколько различных контроллеров и visualizers, каждый из которых имел свой собственный другой вид состояния.
Ключевой пункт здесь был то, что внутренности какого-то конкретного состояния были ограничены своими собственными конкретными модулями, и каждый модуль ничего не знал даже о существовании состояния для других модулей. Какой-то конкретный набор кода с сохранением информации и данных был обычно только несколькими дюжинами строк долго с горсткой элементов данных в состоянии.
Все это было склеено в одной небольшой функции приблизительно дюжины строк, которые не имели никакого доступа к внутренностям ни одного из состояний, и которые просто названный правильными вещами в надлежащем порядке, поскольку она циклично выполнила через моделирование и передала очень ограниченный объем внешней информации к каждому модулю (наряду с предыдущим состоянием модуля, конечно).
Когда состояние используется таким ограниченным способом, и система типов предотвращает Вас от непреднамеренного изменения его, довольно легко обработать. Это - одна из красот Haskell, что это позволяет Вам сделать это.
В одном ответе говорится, "Не используют монады". С моей точки зрения это точно назад. Монады являются управляющей структурой, которая, среди прочего, может помочь Вам минимизировать объем кода, который касается состояния. Если Вы смотрите на одноместные синтаксические анализаторы как на пример, состояние синтаксического анализа (т.е. проанализированный текст, как далеко каждый вошел к нему, любые предупреждения, которые накопились, и т.д.) должен пробежать каждый combinator, используемый в синтаксическом анализаторе. Все же только будет несколько combinators, которые на самом деле управляют состоянием непосредственно; что-либо еще использует одну из этих немногих функций. Это позволяет Вам видеть ясно и в одном месте весь небольшой объем кода, который может изменить состояние и более легко рассуждать о том, как это может быть изменено, снова помогая иметь дело с.
Я знаю то, что продолжается здесь. Проблема не , как установить экранную заставку (это действительно легко и легкая работа настроек блокировщика точно так же, как они, как предполагается, работают) - но что иногда это продолжает загадочно сбрасывать к его позиции по умолчанию (10 минут).
, Как? вот кульминационный пункт. Gnome Mplayer сбрасывает экранную заставку по некоторым причинам на паузе и выходе.
Вот то, как зафиксировать его:
и Ваша экранная заставка будут оставаться способ, которым Вы хотите, чтобы он был.
Inherits=
для включения списка моих любимых наборов значка, начиная с лучшего сначала. Я заметил, что иногда значок устанавливал doesn' t включают конкретный значок, таким образом, вторичные и третичные наборы, перечисленные, по-видимому, заполняют те разрывы.
– Rsync
5 December 2015 в 14:58
Я записал несколько компиляторов в Haskell, и монада состояния является разумным решением многих проблем компилятора. Но Вы хотите сохранить это, краткий обзор---не делает это очевидным, что Вы используете монаду.
Вот пример из Компилятора Haskell Глазго (который я не записал; я просто работаю вокруг нескольких краев), где мы создаем графики потока управления. Вот основные способы сделать графики:
empyGraph :: Graph
mkLabel :: Label -> Graph
mkAssignment :: Assignment -> Graph -- modify a register or memory
mkTransfer :: ControlTransfer -> Graph -- any control transfer
(<*>) :: Graph -> Graph -> Graph
Но поскольку Вы обнаружили, поддержание предоставления уникальных маркировок утомительно в лучшем случае таким образом, мы обеспечиваем эти функции также:
withFreshLabel :: (Label -> Graph) -> Graph
mkIfThenElse :: (Label -> Label -> Graph) -- branch condition
-> Graph -- code in the 'then' branch
-> Graph -- code in the 'else' branch
-> Graph -- resulting if-then-else construct
Целое Graph
вещью является абстрактный тип, и переводчик просто весело создает графики чисто функциональным способом, не будучи знающим, что что-либо одноместное продолжается. Затем когда график наконец создается для превращения его в алгебраический тип данных, от которого мы можем сгенерировать код, мы даем ему предоставление уникальных маркировок, выполняем монаду состояния и вытаскиваем структуру данных.
Монада состояния скрыта внизу; хотя это не выставляется клиенту, определению Graph
что-то вроде этого:
type Graph = RealGraph -> [Label] -> (RealGraph, [Label])
или немного более точно
type Graph = RealGraph -> State [Label] RealGraph
-- a Graph is a monadic function from a successor RealGraph to a new RealGraph
С монадой состояния, скрытой позади слоя абстракции, это не является вонючим вообще!
Вы посмотрели на Атрибутные грамматики (AG)? (Больше информации о Википедии и статье в Читателе Монады)?
С AG можно добавить атрибуты к синтаксическому дереву. Эти атрибуты разделяются в синтезируемых и наследованных атрибутах.
Синтезируемые атрибуты являются вещами, которые Вы генерируете (или синтезируйте) от Вашего синтаксического дерева это могло быть сгенерированным кодом или всеми комментариями, или безотносительно Вашего заинтересованного.
Наследованные атрибуты вводятся к Вашему синтаксическому дереву, это могло быть средой или списком маркировок для использования во время генерации кода.
В Утрехтском университете мы используем Систему Атрибутной грамматики (UUAGC) для записи компиляторов. Это - препроцессор, который генерирует haskell код (.hs
файлы) от обеспеченного .ag
файлы.
Хотя, если Вы все еще изучаете Haskell, затем возможно, это не время, чтобы начать изучать еще один слой абстракции по этому.
В этом случае Вы могли вручную записать вид кода, который грамматики атрибутов генерируют для Вас, например:
data AbstractSyntax = Literal Int | Block AbstractSyntax
| Comment String AbstractSyntax
compile :: AbstractSyntax -> [Label] -> (Code, Comments)
compile (Literal x) _ = (generateCode x, [])
compile (Block ast) (l:ls) = let (code', comments) = compile ast ls
in (labelCode l code', comments)
compile (Comment s ast) ls = let (code, comments') = compile ast ls
in (code, s : comments')
generateCode :: Int -> Code
labelCode :: Label -> Code -> Code
Ну, не используйте монады. Питание функционального программирования является функциональной чистотой и их повторным использованием. Существует данная статья, которую однажды записал мой преподаватель, и он - один из парней, которые помогли создать Haskell.
Бумагу называют, "Почему функциональное программирование имеет значение", я предполагаю, что Вы прочитываете его. Это - хорошее чтение.
давайте будем осторожны относительно терминологии здесь. Состояние не по сути плохо; функциональные языки имеют состояние. То, что является "запахом кода", когда Вы желаете, чтобы присвоить значения переменных и изменить их.
Конечно, монада состояния Haskell там для просто, что причина - как с вводом-выводом, она позволяет Вам сделать небезопасные и нефункциональные вещи в ограниченном контексте.
Так, да, это - вероятно, запах кода.
Еще переместите файлы куда-нибудь и затем установите Ubuntu 14.04.
Я не думаю с помощью Монады состояния, запах кода, когда она раньше моделировала состояние.
, Если Вам нужно к состоянию потока через Ваши функции, можно сделать это явно, беря состояние в качестве аргумента и возвратив его в каждой функции. Монада состояния предлагает хорошую абстракцию: это проводит состояние для Вас и обеспечивает большую полезную функцию для объединения функций, которые требуют состояния. В этом случае использование Монады состояния (или Applicatives) не является запахом кода.
Однако при использовании Монады состояния для эмуляции обязательного стиля программирования, в то время как функциональное решение было бы достаточно, Вы просто делаете вещи сложными.