Ответы пользователя по тегу Linux
  • Как реализовать взаимодействие виртуальной ОС с переферией для прошивки?

    @rPman
    Проброс устройств в виртуальную машину бывает разный, в зависимости от вида подключения, самого устройства, действия могут отличаться от 'вставил и работает' (очень и очень редко) до 'работает только если звезда сойдутся и если запускать заранее подготовленный непростой набор команд перед вставкой устройства и после'.

    Причина - нет адекватной поддержки проброса устройств, чаще всего она ограничена либо работает только при опредленных условиях и по разному на разных устройствах (в смысле компьютер), зависит от производителя процессора intel/amd, возможностей материнки и кучи других мелких нюансов (например десктопные материнки чаще всего ограничивают функционал в биосе). С момента активного использованиея EFI биосов, это еще сильнее усложнилось.

    * Итак - проброс всего pci(-e) устройства вместе с контроллерами и соответственно устройствами, через него подключаемыми. Это самый удобный с точки зрения использования способ (потому как после запуска виртуальной машины контроллер уже доступен внутри и чаще всего без дополнительных движений видит устройство 'как родное'.

    В linux мне известно что это поддерживает только qemu/kvm и поддержка требует соответствующие аппаратные возможности (IOMMU/VT-d плюс в принципе аппаратная виртуализация), даже некоторые gpu могут быть так проброшены внутрь виртуалки, производители видеокарт об этом знают и старательно ставят палки в колеса, так как такой функционал они хотят чтобы пользователи использовали только с их 10х дороже серверными вариантами видеокарт). Требует хорошего прогружения в настройки linux, хотя бы чтобы исключить инициализацию устройство самим linux (некоторые устройства не любят включаться два раза подряд без железной перезагрузки).

    * Промежуточный вариант - проброс USB устройств. Это установка в гостевой операционной системе специального драйвера USB который по сети или каким-либо другим способом (например virtualbox usb при установке проприетарного guest additions) транслирует весь трафик, включая управляющий с хост машины для выбранного usb устройства или контроллера. Точно помню отдельные приложения для трансляции usb по сети между машинами даже без виртуализации, но лично сам не пользовался, гуглите решения обычно платные.

    * Проброс 'блочного устройства' (читай дисков или отдельных разделов, и даже файлов), в этом случае гостевая ос не имеет доступа к самому устройству, но только к данным на нем. Формально это просто подключение диска из файла (потому как даже в windows диск и раздел это буквально файл, который можно открыть fopen по специальному имени). Разные системы виртуализации дают разный интерфейс и удобство. qemu с тем же libvirt - удобнее чем к примеру virtualbox (там нужно в консоли специальную 'скрытую' команду использовать)

    p.s. Проброс видеоускорителя - есть еще протоколы spice но на сколько я знаю они не достаточно функциональны
    Ну и проброс всякой мелочовки типа клавиатура, мышь, планшет/сенсорный экран, мониторы. Это все виртуальные сущности, реальное железо тут не пробрасывается.

    p.p.s. драйвера windows для гостевых систем с каждым разом становятся все хуже и хуже, если я верно понял палки в колеса вставляет сама майкрософт, например windows 10 адекватно в virtualbox уже не работает gpu без глюков (я обхожу большинство проблем только с помощью rdp подключения)
    Ответ написан
    Комментировать
  • Как регулировать громкость приложений через пульт?

    @rPman
    Готового решения боюсь не будет, но написать свое под свою задачу будет не сильно сложно.

    Покупаешь вторую клавиатуру (обычно usb, можно купить типа только расширенная цифровая), рисуешь на кнопках стрелки громкости или как то еще помечаешь какая кнопка громкость какого приложения будет менять, затем настраиваешь какого-нибудь демона на прослушивание клавиатуры (гугл говорит про actkbd (пример), но почему то в ubuntu по умолчанию его нет, возможно за эти годы его переименовали или функционал перенесли в другое приложение типа xbindkeys), как минимум в linux встроен функционал отвязывания клавиатуры от сессии (например с помощью loginctl я могу настроить отдельные рабочие места и привязать видеокарта+монитор+клавиатура каждому свое и соответственно просто отвязать дополнительную клавиатуру чтобы ее использовать в другом демоне или даже xhephir - это xserver в окне)

    А там настраиваешь на каждую кнопку вызов команды смены громкости с помощью pulse-audio
    pactl list
    получаешь список всего, работающих со звуком (рекомендую поизучать, можно ограничить вывод, задать формат вывода, в т.ч. json), устройства, источники, получатели,

    Собственно это единственное место где придется программировать, нужен код, который из данного вывода будет искать твое приложение или источник звука и узнавать его номер sink

    Дальше просто запускаешь команду
    # изменить громкость
    pactl set-sink-input-volume [sink number] [volume percent]
    # переключить mute
    pactl set-sink-input-mute [sink number] toggle
    # bashcompletion по tab автоматом предлагает sink номера уже работающих приложений, это поможет тебе разобраться что именно из вывода pactl list тебе нужно


    p.s. точно видел инструкции, как сменить код клавиши выбранной клавиатуры, тогда не придется отсоединять клавиатуру от сессии пользователя, она просто станет 'непонятной' для обычных приложений, которые будут игнорировать неизвестные коды, а ты в своем приложении будешь их отлавливать
    Ответ написан
    Комментировать
  • Как правильно распарсить логи с файла Linux?

    @rPman
    в filter укажи multiline, пример вот
    p.s. а читать и искать потом как ты собираешься по этим логам?
    Ответ написан
  • Почему две строки при загрузки linux?

    @rPman
    Это меню grub.
    не помню про centos, но в современных версиях, по умолчанию он не показывается, и будет виден только если предыдущее завершение работы было не корректным.

    Если что, в grub есть настройка, сколько времени показывать это меню по умолчанию и автоматически грузить какой пункт (остановить автозагрузку по нажатию ESC или стрелок)

    В разных версиях grub это настраивалось по разному, гугли именно для своей centos grub timeout
    Ответ написан
    1 комментарий
  • Как пробросить порты системы за nat сетью?

    @rPman
    Либо гнать данные через vps-ку, используя ее как сервер посредник, либо настроить upnp и работать как обычно (upnp позволяет настраивать перенаправления портов на роутере автоматически).

    Либо воспользоваться технологией STUN, в ней машины за NAT открывают udp соединения с третьей машиной (твоя vps) а затем, имея на руках порты на роутере, подключаться к ним напрямую минуя vps-ку (udp это позволяет)
    Ответ написан
    Комментировать
  • Lvm versus fsck - как решить проблему курицы и яйца?

    @rPman
    в linux есть btrfs и zfs файловые системы, с функционалом управления разделами и дисками. Первый хоть и рекомендован к работе но имеет незначительные проблемы (я не встречал но они заявлены), второй имеет высокие требования к ram и дает много накладных расходов на диски, и не рекомендуется для hdd (точнее можно, если там есть дисковый кеш большой, встроенный или в контроллере).

    lvm однозначно на помойку, его снапшоты это тормозной ад, когда как btrfs/zfs они бесплатны.

    К сожалению переход lvm+ext4 -> btrfs можно сделать только через backup format restore. В похожих ситуциях я несколько раз делал последовательное уменьшение разделов, в пределах свободного места на диске, переносил данные снова уменьшал... Долгий и опасный процесс (вероятность потери данных при сбое во время упаковки и сдвига раздела - высокая) но когда вообще нет возможности сделать оперативно бакап и восстановления - подойдет. Но лучше выбирай бакапы, они так и так нужны.

    Недостатки btrfs/zfs там же где и их достоинство. Это Copy-On-Write файловые системы, каждая следующая запись происходит в новое место, базы данных в таких случаях сильно фрагментируются (на самом деле не на столько все плохо но на hdd это заметно), и само собой есть возможность это отключить для выбранных каталогов (снапшоты само собой нормально перестанут работать с этими файлами).

    upd. Отключи резет физически и научи комбинации ctrl+shift+alt+prnscr.. +u, ...+b,... +s. prnscr отжимать и нажимать следующую букву, не отпуская ctrl+shift+alt, затем отпускать все кнопки и повторять но последний символ другой.
    u - перемонтирует все маунты принудительно в readonly
    s - запускает sync (формально он не нужен, так как после readonly он уже работает, но я могу придумать комбинации конфига ext4 и опций монтирования когда это не так, с другой стороны времени на этот синк дать нужно, поэтому пока пользователь жмет кнопку - процесс идет)
    b - перезагрузка, даже если все висит (я не помню когда это не сработало, даже если ядро в панике, хотя ситуации придумать можно)

    Подробнее - не отпуская ctrl+shift+alt, нажимаешь и затем отжимаешь prnscr и нажимаешь символ b/u/s/... и только после этого отпускаешь ctrl+shift+alt (иначе он не поймает следующий prnscr)

    вот первая попавшаяся инструкция (shift нажимать не надо только если у тебя в режиме терминала, нажимай всегда не попутаешь, та же фигня чтобы переключиться между текстовыми терминалами ctrl+alt+F1...7 один из них графический, но в режиме графического нужно добавлять shift)

    во всех linux что я смотрел, по умолчанию это работает (но есть шанс что облачные ядра для гостевых виртуалок максимально кастрированы и это там отключено, что логично)

    если открыт консольный терминал, то нажатие этих кнопок будет выдавать текстовые сообщения о процессе (там ее есть комбинации, советую погуглить, но они нужны тем кто ядро отлаживает)

    В результате, если проблема не в драйвере файловой системы или дисковой подсистему, то перезагрузка получится не ломающей файловую систему (базы данных все еще могут быть сломаны, но тут уже ничего не поможет, с другой стороны это происходит очень редко)
    Ответ написан
  • Как создать скрипт для выключения нескольких пк?

    @rPman
    в windows 10 и выше штатно идет openssh сервер (в более ранних версиях такой сервер ставится сторонними средствами в пару кликов, ну может с русскими именами файлов будут легкие проблемы), ищи в Параметры ПК - Дополнительные компоненты - добавить компонент.

    Настраиваешь беспарольную аутентификацию по ключу на целевой машине/профиле и запускаешь удаленно консольную утилиту shutdown /s (по умолчанию оно выключит машину через 1 минуту, предупредив всех работающих на нем пользователей, за это время выключение можно отменить)

    Кстати openssh не обязательно устанавливать, так как штатный планировщик заданий умеет работать по сети - там сверху по правой кнопке можно выбрать подключение к другому компьютеру (при наличии домена или рабочей группы с одинаковыми паролями и администраторскими правами) ну и соответственно утилита командной строки schtasks
    Ответ написан
    Комментировать
  • Как выйти из двух пользователей в Linux, и при этом выполнить команду один раз?

    @rPman
    убить оба шела, сессия автоматически завершится

    Скрипт для этого пиши сам
    ps
    покажет список текущих процессов сессии, а там обычно только sudo и bash (ну и работающий ps), так получишь pid текущего bash
    pstree -s pid_текущего_шела -p
    покажет в одной строчке всех предков от указанного процесса, например так
    systemd(1)───xfce4-terminal(3933)───bash(5169)───sudo(1726858)───sudo(1726872)───bash(1726873)───pstree(1732257)

    тебе достаточно убить два последних sudo и bash (или чем ты там пользуешься) с конца этого списка
    например так
    kill -KILL 1726873 1726872 1726858 5169
    Ответ написан
    Комментировать
  • Могут ли сетевые устройства работать параллельно?

    @rPman
    Вы используете tcp, значит организовать можно как угодно, 'биты будут сочиться'

    Мало того, чтобы утилизировать несколько сетевых устройств, потоки создавать не обязательно, если использовать асинхронные сокеты (в linux это зовется неблокирующие, флаг socket() - SOCK_NONBLOCK), любым удобным для вас инструментом, то простая передача данных не потребует особых ресурсов и спокойно отработает на одном ядре (исключение - 10+гбитный поток, ну может речь уже должна идти о 100+гбит? это на грани возможностей железа и для него нужно использовать специализированные инструменты, предоставляемые сетевой картой, а значит про tcp придется забыть, хотя хз может там все уже удобно сделали)
    Ответ написан
    Комментировать
  • Как восстановить данные с флешки после обновления ядра Linux?

    @rPman
    Немедленно прекратить что либо делать с флешкой, так как любые глупые действия кратно уменьшают вероятность восстановления.
    /dev/sdb1 лежит папка lost+found
    значит файловую систему отформатировали, это значит удалена информация о файловой системе и начальном каталоге.

    Правильные действия - нести флешку специалисту. Но у тебя там крипто кошельки, если они не зашифрованы то не будет никаких гарантий что ремонтник не заберет все там лежащее а скажет клиенту что 'не шмогла', и никто гарантий никаких давать не будет, потому что возможна обратная ситуация, ведь сам клиент может обмануть сервис, перевести монеты и обвинить сервис.

    Что нужно сделать, чтобы восстановить данные самому:
    Первое, снять посекторную копию с диска, причем не раздела а всего диска.. Делать это можно с помощью утилиты dd, внимательно смотреть на сообщения и понимать что они говорят.

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

    Теперь про крипто кошельки, у них тип файла однозначный, я писал приложение, которое пробегало по всему диску и для каждого кластера (отдельный разговор как выбирать размер, можно использовать сектор 512б с оговорками) создавало файл с его копией и скармливало его утилите file (это мощная утилита определения формата файла), в твоём случае нужно найти сигнатуры искомых файлов искать их. Если что то найдешь, делать копию заранее большого файла этого и последующих секторов, надеясь что фрагментации не было. И уже дальше работать с этой копией.

    P.s. весь интернет завален напоминаниями делать бакапы. Помните того парня, что год копался на помойке, а поисках диска от ноутбука? Но нет, люди продолжают хранить важные данные в одной копии на флешке! Которая умирает просто от лежания в ящике просто потому что технология такая
    Ответ написан
    1 комментарий
  • Почему виртуальная машина не получает ип хоста?

    @rPman
    В настройках сетевого устройства VirtualBox выбери тип сети - сетевой мост (bridge) и выбери сетевое устройство хоста, которое подключено к провайдеру (там где стоит dhcp сервер, раздающий нужный тебе ip)

    там же настраивается mac адрес, так как провайдер выдает ip адреса соответственно этому mac.
    Ответ написан
    2 комментария
  • Как пропустить трафик Wireguard через socks5?

    @rPman
    wireguard на халяву не загнать в tcp, так как он udp, поэтому потребуется посредник, типа udptunel

    Вот пример настройки через udp2raw (он еще и этот трафик 'спрячет' за пингами к примеру, само собой это фигня, нормальный dpi это обнаружит)
    Ответ написан
    Комментировать
  • Программный Raid 5 + nwme cache?

    @rPman
    bcache отлично работает, как в режиме кеша только для чтения так и как дополнительный буфер для записей (writeback)
    и это лучший способ способ сожрать ресурс записи ssd диска

    у меня так на очень дешевых комплектующих работала следующая схема linux сервер, специально выделенные медленный hdd + 250гб ssd диск в качестве кеша, полученный ускоренный раздел публикуется с помощью iscsi по гигабитной сети, его монтирует windows машина и на этом диске размещены игрушки (ark будь он неладен 400гб с еженедельными обновлениями по 50-100гб), чуть больше чем за год сожрал 250тб ресурса. Итоговая скорость запуска была примерно в 3 раза быстрее чем если hdd подключить напрямую к windows машине.
    Ответ написан
    2 комментария
  • Файл подкачки на другом диске?

    @rPman
    своп настриивается как точка монтирования в /etc/fstab, если тебе автоматически после перезагрузки
    UUID=xxx-xxx-xx-xxx none swap sw 0 0
    UUID=xxx тут способ указания раздела (или всего диска) для свопа, можно указать устройство /dev/sdXY или сразу файл (автоматически подключит loop девайс и будет туда свопаться)

    если тебе однократно, то подключать командой
    swapon устройство

    Однократно своп нужно проинициализировать командой
    mkswap устройство

    p.s. на сколько я знаю, уже давно, своп может размещаться в т.ч. по сети (nfs например или nbd), точно помню был пример размещения свопа в vram gpu, есть где то поддержка сжатия данных на лету и тьма чего то еще
    Ответ написан
    1 комментарий
  • Установка программы через wine?

    @rPman
    wine в каких то случаях пытается перенести ярлыки приложений windows -> linux но возможно это работает в каких то неизвестных мне комбинациях DE и версий wine.

    у wine есть понятие WINE_PREFIX, это каталог (по умолчанию ~/.wine/ ) где в каталоге ~/.wine/drive_c лежат файлы windows (там еще есть симлинки на диски, например dosdevices/z: это ссылка на домашний каталог пользователя, можно оставлять свои).

    чтобы запустить приложение, нужно написать wine полный_или_относительный_путь_до_приложения т.е. к примеру
    wine ~/.wine/drive_c/Program\ Files\ \(x86\)/WinRAR/WinRAR.exe

    можно кстати написать
    wine "c:\Program Files (x86)\WinRAR\WinRAR.exe"
    Ответ написан
    Комментировать
  • Использование Linux?

    @rPman
    Первая проблема любого linux - это драйвера, пока производители не пошевелятся, доля этой ос будет не выше 3-5% а пользователи будет играть в рулетку - заведется/не заведется.

    Вторая проблема у тебя - это Huawei, китайцы всегда делали софт и поддержку в образцово показательном в худшем виде.

    Ну и по поводу запуска приложений, библиотеки устанавливать надо и на windows. Если разработчик не позаботился чтобы отметить нужные в зависимостях, ставить из вручную. Те что идут в репозитории обычно корректно настроены.
    Ответ написан
    1 комментарий
  • Почему после компиляции своего ядра linux его размер в разы больше?

    @rPman
    Если я верно помню, oldconfig берет конфигурацию из предыдущей сборки (а что там будет по умолчанию не совпадает с тем что выбрал мейнтейнер), т.е. из каталога с исходниками, а тебе, если ты хочешь подправить те что уже в дистрибутиве идут, то бери из /boot/config... (кстати помню для gentoo брал и копировал конфиг у ubuntu, решая таким образом проблемы с видео).

    Размер файла ядра никакой нагрузки на систему не дает, лишний мегабайт выгадывать на x86 машинах, такое себе развлечение, бессмысленное и проблем чего то лишнее отключить не исключает. Да, можно незначительно ускорить запуск (особенно это актуально для виртуальных окружений)

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

    p.s. ложка дегтя, за обновлениями придется следить самостоятельно, никакого функционала обычно в ОС для этого не встраивают
    Помню в gentoo для этого была утилита genkernel но ее все равно запускать вручную
    Ответ написан
  • Есть ли какая то программа для визуальной работы с html?

    @rPman
    Eclipse Web Developer Tools, установка прямо из eclipse - help - eclipse marketplace, в настройках General - WebBrowser включаешь Use Internal Web Browser. Чтобы его открыть, жмешь правую кнопку на .html файле в Project Explorer и выбираешь Open With - Web Browser, и при желании включаешь autorefresh в нем (слева от адресной строки рядом с кнопкой refresh меню, с галочкой autorefresh), будет обновлять браузер при сохранении файлов (проверь, корректно ли он считывает разные зависимости)

    Не уверен, на сколько хорошо это работает с отладкой nodejs/php по уму должно, но как я понимаю тебе статику нужно редактировать, тут все работает как надо.

    p.s. так красиво, как было реализовано в dreamviewer не будет

    p.p.s. Microsoft Visual Studio точно таскало с собой редактор html с браузером и кажется быстрым переходом по клику в браузере в редактор, собственно больше я такого нигде кроме dreamvewer этого не видел.
    Ответ написан
    Комментировать
  • Запуск приложений с другой OC на диске?

    @rPman
    запускать программы от Adobe на Linux, при этом запуская их в среде Windows (в другом разделе диска).
    Тоесть я сижу на Linux и прям в нем, не выходя, запускаю программы из Windows, установленной на этом же диске.
    да, это называется виртуализация (полная или с поддержкой аппаратного ускорения, включается в биосе).

    Штатно с linux идут два независимых проекта виртуализации x86 машины - qemu (с расширением kvm, это полнофункциональный вариант, включающих инструменты проброса оборудования внутрь виртуалки) и virtualbox (в поставке идет community версия, без поддержки проброса usb портов, иначе топать vitualbox.org)

    gui для qemu - virt-manager (libvirt)
    virtualbox идет со своим gui

    Недостатки, начиная с windows 10 поддержки даже ограниченного 3d ускорителя в windows guest больше нет (раньше с virtualbox шли драйвера и даже работало, на win7, с оговорками но cad приложения использовались). С kvm можно попытаться пробросить второй видеоускоритель внутрь виртуалки, с большими шансами это работает но потребуются танцы с бубном

    Есть лайфхак, не устанавливаешь в virtualbox поддержку 3d ускорителя (при установке дополнений отключаешь чекбоксик), но работаешь с windows через подключение rdp (рабочие windows разрешают 1 подключение для администраторского аккаунта). Некоторые программы так работают.

    p.s. wine - настоятельно рекоменудую использовать proton, а чтобы совсем не заморачиваться и делать все из gui, рекомендую lutris.net, приложение управляет разными версиями wine, обновляет, позволяет для разных приложений использовать разные версии ранера

    Еще раз просто не будет, вообще ожидать что в linux будут идти приложения, написанные для windows, когда как разработчики активно этому противодействуют, опрометчиво, но все же у многих получается.
    Ответ написан
    Комментировать
  • Какие легковесные дистрибутивы Linux еще остались?

    @rPman
    Не путай размер дистрибутива и размер установленной системы на диске

    Дистрибутив на установочном livecd/liveusb диске это минимально рабочий (или специально подобранный для типового пользователя) набор пакетов, чтобы минимизировать запросы к серверам репозитариев мейнтейнера, а вот их размер почти у любого дистрибутива - десятки гигабайт.

    Например одно время ubuntu server альтернативно можно было установить, загрузившись в примерно 100-200мб iso образ, с установщиком, который с удобным текстовым интерфейсом устанавливал абсолютно все пакеты по сети из репозитария..

    Место, занимаемое установленной ОС зависит не от выбора мейнтейнера, а от выбора софта, который тебе нужен. Что бы ты не выбрал, пример - если тебе нужно ставить пакеты для разработки нейронных сетей (tensorflow) на nvidia gpu, то качать тебе минимум 5 гигабайт всего что с этим связано (а то и больше).

    Единственный известный мне дистрибутив (с большим комунити), дающий наибольший контроль над устанавливаемыми компонентами - это gentoo. Он не спроста компилирует каждый пакет под пользовательские настройки, в нем с помощью тех же USE флагов определяются не только возможности но и зависимости, которые потянут за собой устанавливаемые пакеты.

    К сожалению, юзерфрендли его не назовешь, так как поддержка обновлений своего конфига это достаточно тяжелый труд (хоть и предоставлена куча удобных инструментов), который если запустить на год другой, может сильно усложнить дальнейшее обновление системы, вплоть до ее полной переустановки (по крайней мере так было с 5-10 лет назад). Придется изучать и разбираться почти во всем, что ты используешь. С gentoo именно ты являешься мейнтейнером своего дистрибутива.

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