Выключение компьютера — действие, с которым обычные пользователи сталкиваются чуть ли не каждый день. Если выключать сервер приходится довольно редко, то обычные, десктопные компьютеры подвержены этой операции очень даже часто. Большинство пользователей выключают linux в графическом интерфейсе системы. В окружении рабочего стола KDE это делается через главное меню, а в Gnome и Unity даже есть специальная кнопка на панели для решения этой задачи.
Но не всегда есть возможность выключить компьютер linux таким образом. Например, если окружение рабочего стола не работает, то больше ничего не остается, кроме того, чтобы выполнять выключение компьютера из командной строки. К тому же выключение компьютера linux через терминал единственно возможный способ для серверов, где нет графического интерфейса. Как вы увидите, этот способ также намного гибче обычного выключения, поскольку вы можете настроить нужное время отключения, или же выключить компьютер, дождавшись завершения работы определенной программы.
Процесс выключения Linux
Часто для выключения Linux из терминала используется утилита shutdown. Есть также команды poweroff, halt, но они для нестандартных случаев. Также выключить linux из консоли можно с помощью сочетаний клавиш SysRQ. Но сначала давайте рассмотрим синтаксис команды shutdown. Естественно, команда shutdown в Linux или любая другая не самостоятельно завершает работу системы и выключает компьютер. Она всего лишь передает запрос на выключение системе инициализации, а затем ядру. А уже они выполняют ряд сложных операций по подготовке и выключению компьютера. Если кратко, то вот они:
- Завершение процессов пользователя.
- Сигнал SIGTERM всем процессам.
- Сигнал SIGKILL всем процессам.
- Монтирование файловых систем в режиме только для чтения.
- Подготовка внешних устройств к отключению.
- Блокировка пространства пользователя, чтобы гарантировать, что ни один код пользователя больше не будет запущен.
- Завершение работы и отключение питания большинства периферических устройств.
- Отключение питания компьютера.
Теперь вы понимаете суть процесса выключения и то почему нельзя просто выдернуть шнур питания с розетки. Если это сделать, компьютер отключится моментально и не выполнит всех необходимых операций, а это может грозить потерей не сохраненных или даже недавно сохраненных данных, повреждением файловой системы и т д. Поэтому желательно выключать компьютер правильно с помощью shutdown или других специальных утилит.
Синтаксис и опции shutdown
Синтаксис команды очень простой:
$ shutdown [опции] [время] [сообщение]
Опции задают параметры отключения, их мы рассмотрим ниже. Время можно задавать в виде чч:мм в 24 часовом формате. Также можно использовать запись +минуты, указывающую через сколько минут от текущего момента нужно выключить компьютер с Linux. Также доступна константа now, указывающая, что выключать нужно прямо сейчас. Параметр сообщение позволяет задать сообщение, которое будет выведено в терминал перед выключением.
Вот основные опции утилиты:
- —help — вывести справку по программе
- -H, —halt — отключить питание, не завершая процессы и не перемонтируя файловые системы
- -P, —poweroff — нормальное выключение
- -r, —reboot — перезагрузка
- -k — не выполнять реальных действий, а только вывести сообщение
- —no-wall — выключить компьютер, но не выводить сообщение
- -c — отменить запланированное выключение linux из командной строки
Вот в принципе и все опции утилиты, их больше чем достаточно для такого простого действия. Теперь можно переходить к примерам, но сначала давайте рассмотрим, что же происходит во время включения Linux.
Выключение компьютера в Linux
1. shutdown
Самая простая и самая часто используемая команда выключения компьютера linux, отключит компьютер немедленно:
sudo shutdown -h now
Как видите, используется обычное выключение, и константа времени now, тоесть сейчас.
Теперь попробуем запланировать выключение компьютера linux через пять минут:
sudo shutdown -h +5 «Компьютер будет выключен через 5 минут»
Мы запланировали вывод сообщения перед выключением. Чтобы отменить команду shutdown выполните:
sudo shutdown -c
Точно так же мы можем указать точное время выключения, например в девять вечера:
sudo shutdown -h 21:00
Как я уже говорил, не только команда shutdown linux умеет выключать компьютер, есть еще несколько утилит способных на это. Рассмотрим их тоже.
2. reboot
Команда reboot обычно используется для перезагрузки системы, но она также умеет выключать компьютер. Мы не будем ее подробно рассматривать, потому, что она еще проще команды shutdown. Для выключения нужно задать опцию -p:
3. halt
Эта команда тоже выключает компьютер. Только делает она это очень по-своему. Она не выполняет никаких подготовительных действий перед выключением, а просто отключает питание:
Использование halt может повредить систему
4. poweroff
Это аналог halt, делает в точности то же самое:
5. SysRQ
Помните, в начале статьи, я говорил о сочетании клавиш для включения компьютера? Рассмотрим этот вопрос подробнее.
SysRQ — это подсистема, реализованная на уровне ядра. Ядро обрабатывает все нажатия клавиш, а с помощью этой подсистемы, оно может принимать от пользователя команды, даже когда система полностью зависла. Основное предназначение этой подсистемы — работа с компьютером в проблемных ситуациях, например, если вы думаете что ваш компьютер заразил вирус, или компьютер завис и его нужно выключить. Для доступа к SysRq используются сочетания клавиш Alt+PrtScr+номер
Самое интересное, что мы можем выполнить безопасное выключение компьютера linux. Для этого зажмите клавиши Alt + PrtScr и поочередно нажимайте:
- R — разблокировать клавиатуру;
- E — послать всем процессам сигнал SIGTERM;
- I — послать всем процессам сигнал SIGKILL;
- S — перенести все данные из кеша файловых систем на диск;
- U — перемонтировать файловые системы только для чтения;
- B — перезагрузить.
Также вместо всего этого можно воспользоваться сочетанием клавиш Alt+PrtScr+O, в таком случае, вся процедура будет выполнена автоматически, эта команда поддерживается не всеми ядрами.
6. Графический интерфейс
Выключить компьютер в графическом интерфейсе ещё проще. Для этого кликните по иконке выключения в правом верхнем углу, а затем выберите Выключить/Завершить сеанс, затем Выключение.. и снова Выключить:
Выводы
Теперь вы знаете все что нужно, о том, как выключить Linux через терминал. Если вас застигнет врасплох ошибка или зависание компьютера, вы знаете что делать. Если остались вопросы — пишите в комментариях!
Перезагрузка компьютера в Linux
Эта статья ориентирована на самых новичков в Linux ну и тех кого интересует как перезагрузить Linux из консоли. Для меня перезагрузить компьютер в терминале или с помощью графического интерфейса это элементарно, но это база, не все новички ее знают и надо об этом написать.
Сегодня мы рассмотрим такие вопросы, как команда перезагрузки Linux из консоли, перезагрузка удаленно, и непосредственно перезагрузка в графическом интерфейсе. Начнем, пожалуй, с обычной перезагрузки системы.
Перезагрузка Linux в графическом интерфейсе
Здесь, как говорится, что может быть проще. Рассмотрим сначала перезагрузку в Ubuntu Unity. Достаточно нажать на кнопку с шестеренкой в правом верхнем углу экрана, и выбрать пункт Выключение:
Затем в открывшимся окне кликнуть по пункту Перезагрузка:
В окружении рабочего стола Gnome, все очень похоже на Unity, а в KDE нужно открыть главное меню, перейти на вкладку выход, и выбрать пункт перезагрузить:
Затем подтвердить перезагрузку.
Перезагрузка Linux в терминале
А здесь уже простор намного шире, существует около десятка команд, которыми можно перезагрузить Linux. Одним нужны root привилегии, другим нет, одни выглядят просто и легко запоминаются, а другие длинные и сложные. Дальше мы рассмотрим их все.
Первая команда перезагрузки Linux, самая распространенная и самая простая:
Как видите, утилите нужны права суперпользователя. После нажатия Enter компьютер сразу уйдет в перезагрузку.
Утилита shutdown, которая используется для выключения тоже позволяет перезагрузить компьютер для этого нужно передать ей параметр -r. Плюс к тому же можно указать время перезагрузки. Сейчас — 0 или now, через одну минуту +1 через две — +2 и т д:
sudo shutdown -r +1
Перезагрузка Linux будет выполнена через минуту после ввода команды.
В системах инициализации совместимых с Init Scripts, существовали уровни загрузки системы — 0,1,2,3,4,5,6, уровень 0 — означал выключение, 6 перезагрузку, остальные режимы работы системы нас сейчас не интересуют. Переключаться между уровнями можно командой init. Только опять же нужны права суперпользователя. Таким образом:
Служба системных сообщений dbus тоже умеет перезагружать компьютер:
/usr/bin/dbus-send —system —print-reply —dest=»org.freedesktop.ConsoleKit» /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Тут уже не нужны права суперпользователя. Это были обычные способы перезагрузки Linux, но есть еще один, нестандартный или даже два. Это магические SysRq клавиши. Ядро Linux отслеживает нажатие определенных сочетаний клавиш, и в ответ на них выполняет нужные действия. Сначала включаем поддержку sysrq:
echo 1 > /proc/sys/kernel/sysrq
Лучше это сделать заблаговременно, так как этот способ полезен когда система зависла и ни на что не реагирует:
Для активации SysRq сочетания зажмите Alt + SysRq и нажмите код клавиши. Для нормальной перезагрузки рекомендуется использовать следующую последовательность: R E I S U B, клавиши нажимать в той же последовательности с интервалом приблизительно секунду.
- R — возвращает управление клавиатурой если Х сервер был завершен некорректно;
- E — ядро посылает всем процессам, кроме init сигнал SIGTERM;
- I — отправляет всем процессам, кроме init сигнал SIGKILL;
- S — ядро проводит синхронизацию файловых систем, все данные из кэша переносятся на жесткий диск;
- U — перемонтирует все файловые системы в режим только чтение;
- B — немедленная перезагрузка, без синхронизации, и дополнительных приготовлений.
Перед перезагрузкой система ожидает завершения всех процессов, останавливает все сервисы, отключает и монтирует в режиме только чтения файловые системы. Это мы и делаем, нажимая последовательно эти сочетания клавиш. Но если вам нужно перезагрузить систему сейчас не дожидаясь отключения всех процессов, например, сервер, можно сразу отправить сигнал B. Вот так: Alt + SysRq + B.
SysRq можно задействовать и без сочетаний клавиш, записав нужный код операции в файл /proc/sysrq-trigger:
echo b > /proc/sysrq-trigger
Система будет перезагружена как есть, без остановки сервисов и подготовки файловых систем, поэтому не сохраненные данные могут быть потеряны, а файловая система повреждена.
Удаленная перезагрузка Linux
Если у вас есть доступ к серверу по ssh то можно очень просто удаленно перезагрузить linux с помощью одной из выше приведенных команд, например:
ssh root@remote-server.com /sbin/reboot
Только опять же для этой операции нужно иметь права root на удаленном сервере.
Выводы
Теперь вы знаете как выполняется перезагрузка linux, вы даже знаете что делать когда система зависла и как перезагрузить сервер по ssh. Если у вас остались вопросы, спрашивайте в комментариях!
Команда Shutdown Linux из командной строки — какие существуют атрибуты
Линукс — это не самая распространенная операционная система среди обычных пользователей. Однако для программистов это привычный интерфейс. Данная ОС дает возможность более точно работать с сервером, софт загружается быстрее, большинство утилит бесплатны, а вирусов под nix меньше, чем под Windows. «Операционка» известна своей консолью. Она более расширенная и удобная, чем у конкурентов. Одна из самых распространенных команд — shutdown. В этой статье рассказано о том, как выполняется перезагрузка Linux из консоли, а также об аргументах функции.
Что такое Shutdown в Linux
Это своего рода функция, обеспечивающая выход из системы, затем выключение компьютера или ноутбука. Люди, знающие основы программирования, понимают, что функция обычно имеет аргументы или параметры. То есть, shutdown — кусочек программного кода, к которому можно обратиться из другой части приложений. В данном случае, через терминал.
Как работать с командами выключения и перезагрузки на Линукс
Практически все действия, которые пользователь выполняет с рабочего стола, можно сделать через этот самый терминал. Таким образом разработчики предоставили возможность более гибко работать с операционной системой, в том числе и перезагружать, отключать питание, вводить в режим сна и так далее.
Какие бывают команды выключения Linux
Кроме строки shutdown, юзер операционной системы Линукс также должен знать о еще трех возможностях: poweroff, halt, reboot. Все они работают по похожему принципу, но их предназначение отличается. Некоторые из них используют аргументы. Ребут, как правило, нужен для того, чтобы перезагрузить ОС. Однако метод также может выключить устройство. Он, как и shutdown, делает все необходимые работы для успешного выключения: завершает фоновые процессы, сохраняет все нужные данные, после чего безопасно отключает рабочую среду.
Halt предназначена для более продвинутых юзеров, поскольку это не просто выключение гаджета. Система приказывает центральному процессору завершить все свои функции, но он сам продолжает работать.
Важная информация! В некоторых случаях команда halt может навредить компьютеру или ноутбуку. Ее следует использовать только в крайних случаях.
Где вызываются команды перезагрузки и отключения Linux?
Обычно функции вписываются в командную строку. Это окно также называется терминалом. Текстовая среда нужна в первую очередь для того, чтобы давать компьютеру определенные инструкции, которые он должен выполнить. К примеру, выключить устройство, удалить файл, создать папку. Это один из вариантов управлять системой, только более гибкий. Все директивы настраиваются, функции выполняются с параметрами.
Терминал или командная строка в Линуксе
Принцип работы прост. Пользователь вводит в строку команду. Система принимает ее, вместе со значениями параметров, если таковы указаны. Далее Линукс компилирует полученную информацию, после чего, интерпретирует в машинный код, который понимает уже сам компьютер. Последний шаг — инструкции выполняются.
Для чего нужны команды Poweroff, Halt и Reboot
Линукс настраивается гибко, поэтому команд также есть множество. Но для чего нужны Poweroff, Halt и Reboot, если есть Shutdown, выполняющая практически все функции, связанные с питанием? Каждый метод отличается по принципу работы. Вдобавок это не все возможности операционной системы. Похожих команд есть более десятка, но все они предназначены для тонкой работы с ОС.
Poweroff
Команда использует ACPI — усовершенствованный интерфейс управления конфигурацией и питанием. Функция в первую очередь для выключения аппарата. Система попросту отключает питание. После ввода, ОС отправляет запрос конфигурации питания. Такая связка очень распространенная в машинном программировании, поскольку позволяет дистанционно управлять состоянием питания устройства. Для этого и нужен прикладной интерфейс ACPI. В отличие от Shutdown, у Poweroff более сложная конструкция, и последовательность действий.
Совет! Если poweroff не работает, рекомендуется ввести следующую строку: sudo poweroff.
Работает практически так же, как и предыдущий метод. Обе строки принято выполнять без параметров. Каждый CPU руководствует процессами операционной системы, а внутри них есть потоки, выполняющие различные действия. Это и есть функции процессора — управлять компьютером. Halt посылает сигнал не просто отключить ЦП, а снять с него всю нагрузку, но сам CPU находится под напряжением. Такая функция дает пользователям возможность получать всевозможные сведения и отчеты о работе целого ряда функций и ОС в целом.
Reboot
Это традиционная перезагрузка, позволяющая также просто выключить компьютер или ноутбук. Принцип работы практически идентичный с Shutdown. При использовании метода, создается лог с отчетом: временем перезагрузки, наличии ошибок и предупреждений. Вся эта информация может использоваться в дальнейшем.
Один из способов вызова команды reboot
Зачем использовать терминал
Не всегда есть возможность нажать на панель задач и выключить устройство. Например, если система зависла из-за какой-либо программы. Точнее, не сама ОС, а рабочий стол. В Линуксе такое иногда происходит. В таких случаях надеяться стоит на терминал. Достаточно ввести одну строку с параметрами, нажать Enter и все.
Некоторые функции предназначены не только для отключения гаджета. Так, например, можно выключить все процессы, кроме центрального процессора, чтобы отследить падения температуры, затем определить исправность термотрубки.
В общем, командная строка обеспечивает более гибкую работу с гаджетом. Она позволяет управлять всеми процессами, настраивать все, что нужно. Одной командой можно добавить или удалить множество пакетов, настроить проект и многое другое. Поэтому, эта OS предназначена больше для программистов, поскольку среда разработки дает больше возможностей. Вдобавок можно забыть о вирусах и обновлениях, как на Windows. Скачать вредоносный файл вместе с каким-либо установщиком из интернета гораздо труднее. Это огромный плюс к безопасности.
Как через терминал перезагрузить Linux: telinit, reboot и shutdown
Существует три метода, как выполнить перезагрузку через терминал. Для этого используются следующие команды: shutdown, reboot. Также существует еще один вариант — telinit.
Важная информация! Некоторые команды ниже необходимо отправлять только с аккаунта, у которого есть root. Чтобы проверить, может ли учетная запись использовать sudo-строки, необходимо зайти в консоль следующее: sudo -l -U user_name. Прав у профиля нет, если выводится этот текст: User terminator is not allowed to run sudo on test-server. В ином случае все будет работать.
Ошибка в командной строке из-за отсутствия прав
Через строку shutdown
Первый способ перезагрузить компьютер или ноутбук — через строку shutdown. Эта команда работает по тому же принципу, что и обычная кнопка выключения в панели задач. Чтобы выполнить перезагрузку, понадобится выставить параметр -r. Ввод будет выглядеть следующим образом: shutdown -r now. Последнее слово значит, что ОС начнет перезагрузку сейчас. Однако есть возможность выставлять другое время, а также выводить сообщение: shutdown -r 15:00 «system is rebooting». Эта команда запишется в запланированные, после чего выполнится в строго указанное время.
Через Linux reboot
Второй метод — использовать Linux reboot. Эта функция может быть вызвана предыдущей командой, но часто пользователи используют ее отдельно. Атрибут -r в строке shutdown — это и есть reboot. Все действия после ввода выполняются пошагово:
- Сначала ОС записывает время в документ логов.
- Затем закрывает все работающие процессы.
- Вызывает sync — запись буфер-данных на диск.
- По завершению записи, перезагружает Линукс.
Чтобы воспользоваться опцией, достаточно ввести в консоль reboot. Без параметров.
Третий вариант — telinit 7. Init — это демон (программа, работающая в фоновом режиме). Эта подсистема управляет всеми остальными процессами. Цифра указывает, на какой уровень выполнения перейти. Седьмой — это перезагрузка. Метод используется не очень часто. Как правило, для проверки изменений в файле inittab. Чтобы выполнить перезагрузку, понадобится ввести telinit 7 в терминал. Параметров времени, сообщения и прочих нет.
К сведению! Это надежный метод, но не самый безопасный, по сравнению с другими.
Как выключить Линукс через терминал: shutdown, halt, poweroff, telinit
Как описано выше, команда reboot состоит из нескольких шагов. Для выключения существует похожий вариант. Его принцип такой же, только он отключает систему. Чтобы отключить ОС, нужно ввести в командную строку halt. Не рекомендуется использовать данный способ постоянно, поскольку это может навредить системе.
Предупреждение о выключении компьютера при вводе в терминал команд shutdown или halt
Второй способ — poweroff. Работает идентично с предыдущим. Также можно использовать telinit 0. Этот способ отключает питание компьютера. Самый безопасный метод — shutdown linux. Для этого необходимо ввести в терминал следующее: shutdown -h now. Это то же самое, что отключение через кнопку на панели задач. Данная команда пошагово выключает все процессы, что обеспечивает наилучшую безопасность.
Полезная информация! Чтобы открыть терминал, нужно нажать сочетание клавиш Ctrl + ALT + T.
Преимущества работы с консолью очевидны. Это ускоряет выполнение большинства процессов операционной системы Линукс. Главное — выучить определенные строки. В этом поможет постоянная практика. А о способах выключить и перезапустить Linux описано в этой статье.
включение и отключение 3g модема из консоли
задачей стоит на удаленном компе поддерживать круглые сутки VPN соединение через интернет от 3g модема. я написал скриптик который пингует сервер и если пингов нет выключает и заново подключается к модему и vpn. но это не работает как система, тоесть через 40 часов отваливается, к сожалению, хотя раз в 5-15 часов скрипт срабатывает и переподключается нормально. значит этого недостаточно. как же лучше это сделать? моей идеей стало выключить питание на модеме и включить его заново. только как реализовать — не знаю. а какие идеи вы можете подсказать? система — kubuntu. причем нельзя полностью отключать все usb, а только конкретный.
for i in 1 2 3 4 5 6 7 8 9 10; do #делаем 10 пингов до сервера
ping -c 1 192.168.10.18 || flag=$(($flag+$inc)) && echo «$flag» #пинг не прошел — инкрементируем счетчик
if [ «$flag» -gt «2» ]; then #если потерь пакетов больше 2х
sudo poff bivpn
while true #убиваем пока не убьем дозвонщик 3g модема
sudo killall wvdial || break #нечего убивать? вышли из цикла
sudo wvdial& sleep 40 && sudo pon bivpn #поднимаем дозвонщик и через полторы минуты VPN
echo «потерь $flag»
К сожалению почему-то код не форматируется по строчкам.
но самый главный вопрос -как выключить и включить питание usb устройства
- Ссылка
for i in 1 2 3 4 5 6 7 8 9 10
Всё правильно, через 10 попыток отвалится. Замени на while true, если надо бесконечно. Дальше скрипт не читал, ибо оформлен ужасно и нечитаемо.
- Показать ответ
- Ссылка
перечитайте скрипт теперь. for . — делает 10 пингов.
- Показать ответ
- Ссылка
Модем можно выключать/включать AT-командой.
- Ссылка
перечитайте скрипт теперь. for . — делает 10 пингов.
Перечитал. Вижу, что делается 10 пингов, если больше 2 потеряно, то убиваются программы и запускаются заново. Но я нигде не вижу, чтобы весь этот процесс повторялся больше одного раза, поэтому вопрос — кто запускает этот скрипт (руками, или по крону, или он из консоли запущен как «while true; do 3g-script.sh; done»?).
А вообще, это нехороший способ проверять соединение пингами. Pppd умеет вызывать скрипты из /etc/ppp/ip-down.d при потере соединения, а проверять его можно через ifconfig. А ещё pppd умеет автоматически переподключаться при потере соединения; если wvdial так не умеет, то на помойку его и заменить на pppd.
- Показать ответ
- Ссылка
скрипт запускается раз в 5 минут по кронтабу
wvdial как раз таки и использует демон pptpd, он умеет это делать (persist), но проблема в том что это не спасает. попробуйте сами подержать соединение 30-40 часов. интерфейс будет поднят, а работать не будет. соответственно и скрипты из id.down выполняться не будут. ну и к тому же я не гуру никсов, я смог придумать только такой вариант, если скажете что есть идея лучше, то готов выслушать
- Ссылка
for i in 1 2 3 4 5 6 7 8 9 10;
- Показать ответ
- Ссылка
это не самое страшное, что сделано криво. вопрос стоял в питании модема
- Ссылка
а по хорошему надо конечно с причиной разбираться, а не нагромождать костыли.
что в логах видно?
- Ссылка
- Ссылка
Самый надёжный способ перезапустить 3G-модем — это обрубить ему питание при помощи реле. Более простой, но менее надёжный вариант — профилактическая перезагрузка, например раз в сутки. AT-команды для разных модемов могут быть разные, так что уточни производителя и модель своего модема. И естественно, если модем уже завис, то AT-команды не помогут.
- Ссылка
но самый главный вопрос -как выключить и включить питание usb устройства
если root hub позволяет то через sysfs можно или можно попытаться usb reset команду выполнить для порта.
надо гуглить и тестировать
- Ссылка
Ну чо, решил проблему?
Расскажи, тоже интересует.
- Показать ответ
- Ссылка
да нифига ничего полезного, к сожалению. пока подзабил
- Показать ответы
- Ссылка
Похоже, есть четыре пути:
1) слать AT команды
например, «AT+CFUN=1,1» или «AT!RESET»
2) подправить /etc/ppp/options
например:
Заюзал путь №2, но пока не понаблюдал.
- Показать ответ
- Ссылка
Внутри все тот же wvdial.
- Ссылка
Может я и наивен, но что-то захотелось напомнить про rfkill.
- Ссылка
Автоматический сброс usb 3G модема при зависании
1) Пишем код на C в файл
nano usbreset.c
2) Компилируем
gcc -o usbreset usbreset.c
1-2) Или скачиваем скомпиленный мною 😎
http://rghost.ru/39466254
3) Создаем новый супер-скрипт
nano resetmodem.sh
4) Добавляем строчку в кронтаб для root’а
nano /etc/crontab
5) Перезапускаем крон (под root)
/etc/init.d/cron restart
Примечание: это для убутны, для других линуков может быть по-другому.
1-5) или вручную под рутом перезапускай скрипт resetmodem.sh
- Ссылка
p.s. Как ты наверно догадался, утилита:
usbreset /proc/bus/usb/BBB/DDD
сбрасывает юсб-устройство DDD на шине BBB
- Показать ответы
- Ссылка
p.s.2. Ну и последнее замечание, строка:
MM=«Modem»
это маркер модема в списке устройств
lsusb
Вы можете ставить любой маркер, по вашему вкусу, например «Huawei» или что-то подобное.
- Ссылка
А на ядре 3.5 работает?! 😉
- Показать ответ
- Ссылка
А в чем подвох? Не знаю. У меня 3.2 — работает, и кстати неплохо.
Лучше ответь на такой вопрос.
Иногда соединение замирает. Синий диод на модеме горит, ifconfig показывает соединение. Но когда запускаешь пинг — он зависает, и может минуты 2-3 просто думать.
Как можно ограничить время «думания» пинга, ну например 15 секундами, т.е. давать команде ping не более 15 сек. на отработку пинга?
Как вобще в линуксе ограничивать работу команды?
- Показать ответы
- Ссылка
1) ping -w .
2) timeout из coreutils
- Показать ответ
- Ссылка
resetmodem.sh
Уже нашел timeout, и даже доработал скрипт.
nano resetmodem.sh
- Ссылка
А в чем подвох? Не знаю. У меня 3.2 — работает, и кстати неплохо.
usbfs — deprecated, и убрана из ядра 3.5
Иногда соединение замирает. Синий диод на модеме горит, ifconfig показывает соединение. Но когда запускаешь пинг — он зависает, и может минуты 2-3 просто думать.
Соединение не замирает, просто проблемы у оператора. У меня такое часто бывает в «часы пик».
Некоторые модемы, например мой Huawei E171, посылают состояние соединения в /dev/ttyUSB2 примерно раз в секунду и уровень сигнала и тип подключения приблизительно раз в минуту, или чаще если качество сигнала изменяется.
- Показать ответ
- Ссылка
usbfs — deprecated, и убрана из ядра 3.5
Т.е. файловые имена юсб исчезнут, и строчка:
fd = open(filename, O_WRONLY)
будет выглядеть как-то так:
fd = openusb(bus, device, O_WRONLY)
Не в курсе как конкретно?
Но вобще спасибо за-на-водку, буду знать )
посылают состояние соединения в /dev/ttyUSB2
ttyUSBX — это я так понимаю эмуляция последовательного порта. Тут выше говорили что модем может вобще перестать откликаться на AT-команды. В этом случае аппаратный сброс — единственное решение. Второй момент: модем может показывать что всё нормально, но соединение будет дохлое — а это проверяется только пингом.
- Показать ответ
- Ссылка
Т.е. файловые имена юсб исчезнут, и строчка:
Т.е. Вам надо разбираться с /sys/bus/usb/.
Тут выше говорили что модем может вобще перестать откликаться на AT-команды.
А почему Вы решили, что в таком случае он будет откликаться на команды USB-хаба? Далеко не факт, что все хабы могут отключать питание по команде (и что же это за команда, было бы интересно узнать).
- Показать ответ
- Ссылка
Не подскажите какой функцией это делать? (Я в сях не очень).
А почему Вы решили, что в таком случае он будет откликаться на команды USB-хаба?
Я не решал такого. Более того, из суточных наблюдений выяснилось, что модем иногда намертво зависает (один раз в сутки так завис), что даже команда..
(и что же это за команда, было бы интересно узнать).
..описанная выше в C-коде:
rc = ioctl(fd, USBDEVFS_RESET, 0);
не помогает.
Но эта команда, во-первых, более низкоуровневая, чем AT-команда, т.е. модем может не отвечать на AT, но на шине usb будет. Во-вторых, она применима для любого не то что модема, а даже для любого usb-устройства. Команды же AT могут отличаться для разных модемов.
- Показать ответ
- Ссылка
Не подскажите какой функцией это делать? (Я в сях не очень).
в sysfs можно писать хоть на баше, хоть на питоне. В интернете можно встретить упоминание, что «сброс» устройства можно эмулировать как
не отключает порт, а лишь запускает процедуру сброса. Если устройство не отвечает, то ему эта команда будет до лампочки, ведь питание то не отключается.
Команды же AT могут отличаться для разных модемов.
AT+CFUN должен понимать любой модем.
т.е. модем может не отвечать на AT, но на шине usb будет.
Выше Вы написали что это не помогает.
Более того в спецификации USB-2.0 (глава 11.11)сказано:
Self-powered hubs may have power switches that control delivery of power downstream facing ports but it is not required. Bus-powered hubs are required to have power switches. A hub with power switches can switch power to all ports as a group/gang, to each port individually, or have an arbitrary number of gangs of one or more ports.
Таким образом, не существует универсального способа программным образом эмулировать выдёргивание и втыкание модема. Если повезёт, то можно воспользоваться http://marc.info/?l=linux-usb-devel&m=113724451205634
- Показать ответ
- Ссылка
Интересная информация. Респект.
Я понял что хабы USB 2.0 с внешним питанием могут иметь программное управление питанием, но не обязаны. По ссылке краз приводится список из трех производителей и утилита для управления питанием и индикаторами портов.
Bus-powered hubs are required to have power switches.
Правильно ли я понял, что хабы USB 2.0 с питанием от шины ОБЯЗАНЫ иметь управление питанием?
p.s. Кстати, поглядел свой встроенный usb-хаб по lsusb -v, там явно указано:
p.s.2. По крайней мере описаное мной выше решение справляется с 99% зависаний. Ну а в идеале нужно иметь хаб усб 2.0 с поддержкой управления питанием.
- Ссылка
Пока тема не закрылась, публикую последнюю версию скрипта resetmodem.sh:
Что нового:
1) введена защита от одновременного запуска нескольких копий;
2) константы оптимизированы под реальную работу;
3) небольшие улучшения некоторых команд.
Скрипт запускается каждые две минуты по шедулеру от имени рута.
В целом решение работает хорошо. Почти всегда модем сбрасывается (по моим прикидкам раз 100 в суки), но иногда (раз в сутки) модем может намертво повиснуть. Чтобы побороть эту проблему, нужно покупать управляемый хаб, о чем чуть выше говорилось. Для меня в этом пока нет особой нужды.
- Показать ответ
- Ссылка
вообщем почти работает, доработал ваш скрипт,тк knetwork-manager не всегда хотел через команду nmcli con up id «$CN» включать соединение, проблема решалась так: for i in <1..5>; do #делаем 5 попыток поднять соединение echo «попытка соединения:»$i sleep 3 /etc/init.d/network-manager restart # перезапустить network-manager timeout -k 5 -s TERM 15 nmcli con up id «$CN» nmcli con status id «$CN» Err=$? if [ $Err == 0 ]; then echo «Соединение установлено.» break fi done и то в цикле тк network-manager на второй раз включал созданое соединение и уже сам поднимал созданное соединение, у меня зависания модема не было. моя проблема была в следующем: провайдер не обновлял трафик(безлимит) (не поднимал скорость в 00:00) и скачивание было на прежней скорости(малой), позвонил, они проблему не решили, только стали обрубать модем в 00:00 и все. По скрипту: не всегда командой поднималось соединение, пришлось перезагружать network-manager, и он уже сам поднимал соединение, и то не всегда(после
попыток пяти) на второй раз. Все. Большое спасибо Novator.
Быстрота Linux на Windows 10
Ода bash-терминалу в Windows Subsystem for Linux
Статья о настройке функциональности и внешнего вида bash-терминала Windows Subsystem for Linux (WSL) в Windows 10.
Введение
Я постоянно использую терминал для работы с git и автоматизации сборки проектов (вёрстка/фронтенд: компиляция pug и scss, обработка изображений, транспиляция js…). На моём рабочем компьютере стоит Windows 10, а на ноутбуке — OSX и мне хочется использовать одни и те же консольные команды на обеих системах, поэтому я использовал GitBash (терминал, устанавливающийся вместе с Git) внутри эмулятора (Cmder). Такая связка работала заметно медленнее терминала на OSX, поэтому я был воодушевлён новостью «В Windows 10 встроили подсистему Linux» (март 2016 г.), но тогда, в 2016 году, её использование разочаровало: нельзя было запускать из bash-терминала программы Windows, подсистема не определяла изменение файла, если изменение было сделано из Windows. Сейчас эти проблемы решены.
Спойлер
Главный выигрыш для меня — скорость. В моём стартовом репозитории есть трудоёмкая задача полной сборки проекта (компиляция, транспиляция, спрайты, шрифты, картинки…), с Gitbash она занимает 17 секунд, с bash-терминалом WSL — 10 секунд.
Упоминаемые в статье файлы
- .bashrc
- .dircolors
- .bash_aliases
- .inputrc
- .vimrc
Установка Windows Subsystem for Linux (WSL)
В сети полно статей с инструкциями (по большей части, устаревших). Пользуйтесь официальной инструкцией с docs.microsoft.com и всё получится. Я установил Ubuntu, т.к. имею небольшой опыт ее использования.
После успешной установки можно запустить терминал подсистемы Linux командой bash в cmd.exe (или PowerShell) или кликом по иконке в меню «Пуск».
Основы использования терминала Ubuntu в Windows 10
Это подсистема внутри Windows, чтобы использовать nodeJS и git, нужно поставить их в подсистему (даже если они уже установлены в Windows). Я выбрал вариант с Ubuntu, поэтому при установке nodejs пользовался этой инструкцией, а git установил командой sudo apt-get install git (не забудьте указать git-у своё имя пользователя и email).
Можно запускать приложения Windows. Попробуйте notepad.exe — запустится Windows-блокнот.
Диски Windows расположены в /mnt/ . Попробуйте cd /mnt/c/ && ls для перехода к диску С:/ и вывода его корневых директорий (по умолчанию вывод выглядит уныло, но это настраивается).
Директория пользователя расположена в
для переходя в неё). Просто напоминаю.
В Linux-системах заглавные и строчные символы — разные символы. При использовании автодополнения ( Tab ) важно вводить символы в правильном регистре.
Директория пользователя подсистемы Linux физически у меня расположилась по довольно длинному пути (см. ниже). Сегмент nicothin — имя пользователя системы (как в начале пути (Windows), так и в конце (Ubuntu)).
Если редактировать файлы Linux-подсистемы из Windows, то Linux в некоторых случаях не сможет получить к ним доступ (не хватит прав). После такого редактирования нужно в bash-терминале подсистемы выполнить что-то вроде chmod 777
/.bashrc — редактированный из Windows файл) и перезапустить терминал. Или можно использовать команду source
/.bashrc (укажите редактированный файл) для применения внесённых изменений.
Как запускать Sublime Text из консоли Ubuntu
Если используете Sublime Text, добавьте путь к subl.exe в PATH в Windows, чтобы по команде в терминале subl.exe запускался Sublime Text:
- В проводнике сделайте правый клик на Этот компьютер, выберите Свойства, потом Дополнительные параметры системы.
- На вкладке Дополнительно нажмите кнопку Переменные среды.
- Сделайте двойной клик по Path для перехода к её редактированию.
- Нажмите кнопку Создать и добавьте путь к subl.exe.
В моем случае это c:Program FilesSublime Text 3 . - Перезапустите терминал.
Вконтакте ВКонтакте вконтакте вконтактов
Настройка консоли Ubuntu
Цвета
Увы, сразу после установки консоль (особенно вывод команды ls ) выглядит «бородато» и «носит свитер».
Можно добавить файл с настройками цветового оформления ( touch
/.dircolors для создания файла) с этим содержимым.
Содержимое удобно добавлять из Windows, но тогда после сохранения файла в bash-терминале выполните chmod 777
/.dircolors и перезапустите терминал.
Переход к нужной директории при старте
Если при запуске терминала хочется попадать в директорию проектов, можно вписать в самом верху
/.bashrc команду cd /mnt/d/projects/ (укажите путь к нужной директории).
Алиасы
Добавим файл ( touch
/.bash_aliases ) c этим содержимым и перезапустим bash-терминал.
Теперь по команде subl . откроется Sublime Text (текущая папка будет показана как проект), а по команде наподобие subl filename.txt можно быстро открывать файлы.
Странная проблема с алиасами
Я настраивал bash-терминал на двух домашних компьютерах с Windows 10 и на одном из них после добавления файла терминал при рестарте выводил 4 сообщения : command not found . Из-за чего — я так и не понял (права доступа были и владелец файла — я), но нашел строки в
/.bashrc , которые к этому приводили. Это было подключение файла с алиасами:
Решил проблему, закомментировав эти строки и вписав алиасы прямо в
/.bashrc (в самом низу).
Показ git-ветки в командной строке
Шаг 1: добавим в начале
/.bashrc функцию для показа ветки:
Шаг 2: определим переменную, отвечающую за приглашение командной строки, добавим в неё показ результата работы этой функции (см. .bashrc ). Получится что-то вроде:
Мелкие улучшения
Есть довольно много действий в bash-терминале, на которые Windows 10 отреагирует звуковым сигналом (нажатие Backspace , когда уже нечего стирать, например). Чтобы это отключить, создайте
/.inputrc со строкой set bell-style none .
Vim по умолчанию показывает довольно тёмный текст, что на тёмном фоне смотрится плохо. Можно создать
/.vimrc со строкой set background=dark , чтобы текст стал более читаемым.
Замеченные баги
Работать с буфером обмена по умолчанию не комфортно ( Ctrl + V , Shift + Insert не работают, приходится кликать (. ) ПКМ по заголовку окна и выбирать Изменить → Вставить). Решается использованием терминала не самостоятельно, а внутри Cmder.
Несколько раз видел странный глюк отображения многострочной команды: как будто символы второй строки не перенеслись, а печатаются в первой строке. Редко, не критично.
На одном из домашних компьютеров работает сохранение истории команд между сеансами, на другом не работает (хотя права доступа и владелец файла
/.bash_history — активный пользователь и сохранение истории включено). Не критично.
Не работают инструменты копирования в буфер. К примеру, при настройке SSH для github.com, есть инструкция для Linux:
Но её невозможно выполнить, т.к. xclip работать не будет. Решается использованием виндовской утилиты: clip.exe
После загрузки Windows иногда (было всего дважды) отказывается работать. Помогает перезагрузка (это же Windows).
Брандмауэр Windows по умолчанию не даёт зайти на запущенный внутри WSL сервер при запросе с другого устройства (запускаем сервер разработки на рабочем компе, открываем его страницы с телефона, находящегося в той же локальной сети). Как это лечить — не разобрался, приходится временно отключать брандмауэр.
Как заходить на сервер, запущенный в WSL, со сторонних устройств в одной локальной сети
Я пишу много html-страниц. В процессе работы у меня запущен локальный сервер, собирающий разметку, стили, javascript, спрайты и т.п. Бывает удобно запустить на основном компьютере сервер и зайти на него с помощью ноутбука, телефона, планшета (сервер доступен по IP, наподобие http://192.168.1.207:8080). Однако, встроенный в Windows 10 фаервол по умолчанию блокирует такие соединения.
Чтобы попасть на такой сервер, нужно добавить правило для брандмауэра:
- Найти с помощью поиска «Брандмауэр защитника Windows», открыть, нажать слева «Дополнительные параметры».
- В открывшемся окне Монитора брандмауэра выбрать (слева) «Правила для входящих…», нажать «Создать правило» (справа).
- Выбрать «Для порта», нажать «Далее».
- Выбрать «Определенные локальные порты», ввести номер порта (мой локальный сервер работает на порту 8080, его я и ввёл), нажать «Далее».
- Выбрать «Разрешить подключение», нажать «Далее», выбрать профили (я выбрал все), «Далее».
- Ввести какое-либо имя, нажать «Готово».
После этого получится зайти с любого устройства (в одной локальной сети) на запущенный в WSL на рабочем компьютере сервер.
Комфортное использование с Cmder
Для более тонкой настройки внешнего вида и комфортной работы с буфером обмена (привычное сочетание Ctrl + V для вставки) удобно использовать bash-терминал подсистемы Linux внутри cmder (эмулятор терминала, внутри которого можно запустить один из установленных в Windows терминалов). Для этого нужно добавить возможность старта WSL-консоли в настройках Cmder:
- Правый клик по иконке бургера в нижнем правом углу для перехода к настройкам.
- В разделе Startup выбрать радиокнопку Auto save/restore opened tabs, чтобы при рестарте не создавать вкладки заново.
- В разделе Startup, подразделе Tasks проверить наличие задачи WSL::bash. Если её нет, нажать кнопку Add/refresh default tasks… и согласиться на добавление задач.
- В списке задач появится пункт WSL::bash, при создании новой вкладки терминала нужно выбрать его.
Если в списке задач есть пункт WSL::bash, но WSL не запускается при его выборе (в момент создания новой вкладки Cmder), то в настройках можно попробовать нажать Add/refresh default tasks… и согласиться на обновление списка задач (см. п. 3). Если и после этого не получается запустить терминал подсистемы (Cmder сообщает о проблеме и пишет, что по нажатию Enter закроет вкладку), то можно добавить свою собственную задачу, которая будет запускать cmd.exe и сразу вызывать в ней команду bash . Команда запуска терминала будет выглядеть так:
Вместо заключения
Я скачал и установил в систему шрифт Ubuntu Mono для большей аутентичности внешнего вида терминала.