<rss version="2.0" xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Михаил Юдин</title><link>https://mikhail-yudin.ru/blog/linux/</link><description/><generator>Hugo -- gohugo.io</generator><language>ru</language><lastBuildDate>Fri, 26 Jun 2020 00:00:00 +0000</lastBuildDate><image><url>https://mikhail-yudin.ru/images/brand/favicon.png</url><title>Михаил Юдин</title><link>https://mikhail-yudin.ru/</link></image><atom:link href="https://mikhail-yudin.ru/blog/linux/index.xml" rel="self" type="application/rss+xml"/><item turbo="true"><title>Оптимизация и ускорение редактора VIM</title><link>https://mikhail-yudin.ru/blog/linux/optimizaciya-i-uskorenie-vim/</link><pubDate>Fri, 26 Jun 2020 00:00:00 +0000</pubDate><guid>https://mikhail-yudin.ru/blog/linux/optimizaciya-i-uskorenie-vim/</guid><description>Делюсь опытом ускорения редактора VIM при использовании через SSH соединение, в том числе при работе через tmux.
VIM хорошо работает по SSH После перехода на удалёнку по SSH и перехода с IDEA на VIM, стал использовать ресурсы серверов для веб-разработки, ибо сервера обычно мощнее и оперативы больше ;)
Скорость работы VIM по SSH зависит от нескольких факторов:
качество соединения скорость передачи данных используемый протокол передачи данных количество обновлений экрана Увеличиваем скорость при помощи mosh Качество и скорость передачи данных понятный вопрос и он тут обсуждаться не будет.</description><enclosure url="https://mikhail-yudin.ru/blog/linux/optimizaciya-i-uskorenie-vim/optimizaciya-i-uskoreniye-vim.png" type="image/png"/><turbo:content><![CDATA[
      		<header>
      			<h1>Оптимизация и ускорение редактора VIM</h1></header>
            <div class='entry-content'>
              <p>Делюсь опытом ускорения редактора VIM при использовании через SSH соединение,
в том числе при работе через tmux.</p>
<h2 id="vim-хорошо-работает-по-ssh">VIM хорошо работает по SSH</h2>
<p>После <a href="/blog/linux/rabotaem-udalyonno-po-ssh-na-karantine">перехода на удалёнку по SSH</a>
и <a href="/blog/frontend/perehod-s-phpstorm-ili-idea-na-vim">перехода с IDEA на VIM</a>,
стал использовать ресурсы серверов для веб-разработки, ибо сервера обычно мощнее
и оперативы больше ;)</p>
<p>Скорость работы VIM по SSH зависит от нескольких факторов:</p>
<ul>
<li>качество соединения</li>
<li>скорость передачи данных</li>
<li>используемый протокол передачи данных</li>
<li>количество обновлений экрана</li>
</ul>
<h3 id="увеличиваем-скорость-при-помощи-mosh">Увеличиваем скорость при помощи mosh</h3>
<p>Качество и скорость передачи данных понятный вопрос и он тут обсуждаться не будет.</p>
<p>Используемый протокол влияет на скорость работы VIM. По умолчанию ssh работает
по протоколу TCP, что увеличивает задержки на проверку целостности передаваемых данных.</p>
<p>Существует альтернатива ssh — <strong>mosh</strong>. Программа состоит из сервера и клиента,
что требует установки на обоих машинах. Преимущество использования mosh в обмене
данными по протоколу UDP, что увеличивает скорость работы редактора минимум в 2 раза.
Бонусом в mosh реализованы методики работы с проблемными соединениями вплоть до разрыва.</p>
<h3 id="уменьшаем-количество-обновлений-экрана">Уменьшаем количество обновлений экрана</h3>
<p>Чем больше перерисовок на экране, тем больше данных для этого нужно передать.
Чтобы лишний раз не перерисовывать весь экран, а только его часть и только в
моменты когда это нужно существует опция <code>lazyredraw</code>. Для её использования
пропишите в ваш файл <code>.vimrc</code> директиву: <code>set lazyredraw</code>.</p>
<p>Так же советую отключить относительную нумерацию строк и подсветку текущей
строки.</p>
<p>Делается это при помощи:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set nocursorline nocursorcolumn norelativenumber
</code></pre></div><h2 id="увеличиваем-скорость-переключения-между-буферами">Увеличиваем скорость переключения между буферами</h2>
<p>Примерно неделю или две мучался с тем, что приходилось ждать около двух секунд
пока не переключится буфер на другой. Поисследовав различные конфиги обнаружил
интересную опцию <code>hidden</code>, что даёт возможность хранить открытые буферы в памяти.
Это увеличивает скорость переключения между буферами примерно в 25 раз по
ощущениям.</p>
<p>Использовать эту опцию удобно в паре с опцией подтверждения закрытия буфера
чтобы не потерять несохранённые данные, а так же установить опцию переиспользования
буфера.</p>
<p>Все три опции устанавливаются так же в <code>.vimrc</code>:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set hidden confirm
set switchbuf=useopen
</code></pre></div><h2 id="увеличиваем-скорость-подсветки-синтаксиса">Увеличиваем скорость подсветки синтаксиса</h2>
<p>В vim есть возможность ограничить количество колонок для подсветки синтаксиса.
Задаётся это опцией <code>synmaxcol</code>. Для меня осталось загадкой, почему для кириллицы
значение параметра должно быть увеличено в двое. по предположениям это связано
с использованием кодировки utf-8. Таким образом, для подсветки 128 колонок необходимо:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set synmaxcol=<span style="color:#bd93f9">256</span>
set regexpengine=<span style="color:#bd93f9">1</span>
</code></pre></div><p>Вторая строка бонусом заставляет движок использовать старую версию матчера
регулярных выражений.</p>
<p>Внимание: меленькое значение заставит слететь подсветку синтаксиса для строк ниже
при превышении лимита. Правда отрисовку это ещё больше ускорит =)</p>
<h2 id="в-заключение">В заключение</h2>
<p>Используйте минимум плагинов, включайте фичи при надобности, используйте больше
встроенных возможностей. В соседнем материале кстати рассказал, как создать
<a href="/blog/linux/statusnaya-stroka-vim-bez-plaginov">статусную строку без плагинов в 5 строк</a>.</p>
<p>Всё вышеописанное позволило ускорить работу в редакторе примерно раз в 100 по
сравнению с изначальной конфигурацией.</p>
<p>Приложу что получилось в vimrc:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set nocursorline nocursorcolumn norelativenumber
set ttyfast
set lazyredraw
set updatetime=<span style="color:#bd93f9">300</span>
set synmaxcol=<span style="color:#bd93f9">256</span> <span style="color:#6272a4">&#34; UTF = x2</span>
syntax sync minlines=<span style="color:#bd93f9">256</span>
set regexpengine=<span style="color:#bd93f9">1</span>
set hidden confirm <span style="color:#6272a4">&#34; this speeds up buffer switch x25 I think</span>
set switchbuf=useopen
</code></pre></div><p>Комфортной и быстрой работы в редакторе VIM!</p>

            </div>
      	]]></turbo:content></item><item turbo="true"><title>Статусная строка VIM без плагинов в 5 строк</title><link>https://mikhail-yudin.ru/blog/linux/statusnaya-stroka-vim-bez-plaginov/</link><pubDate>Fri, 26 Jun 2020 00:00:00 +0000</pubDate><guid>https://mikhail-yudin.ru/blog/linux/statusnaya-stroka-vim-bez-plaginov/</guid><description>В VIM статусная строка есть по умолчанию. Можно малейшими усилиями доработать её под свои нужды.
Как создать свою статусную строку для VIM Создать статусную строку очень просто и оказывается плагинов совсем не требуется для того, чтобы получить нечто подобное плагинам airline, lightline и другим.
Всё что требуется — разобраться, что и как мы добавим в статусную строку.
Для модификации статусной строки используется переменная statusline. Подробнее о ней можно ознакомиться во встроенной в VIM справке: :help statusline.</description><enclosure url="https://mikhail-yudin.ru/blog/linux/statusnaya-stroka-vim-bez-plaginov/statusnaya-stroka-vim-bez-plaginov.png" type="image/png"/><turbo:content><![CDATA[
      		<header>
      			<h1>Статусная строка VIM без плагинов в 5 строк</h1></header>
            <div class='entry-content'>
              <p>В VIM статусная строка есть по умолчанию. Можно малейшими усилиями доработать её под свои нужды.</p>
<h2 id="как-создать-свою-статусную-строку-для-vim">Как создать свою статусную строку для VIM</h2>
<p>Создать статусную строку очень просто и оказывается плагинов совсем не требуется
для того, чтобы получить нечто подобное плагинам airline, lightline и другим.</p>
<p>Всё что требуется — разобраться, что и как мы добавим в статусную строку.</p>
<p>Для модификации статусной строки используется переменная statusline.
Подробнее о ней можно ознакомиться во встроенной в VIM справке: <code>:help statusline</code>.</p>
<p>Как только ознакомились с переменными для отображения разной информации в статусной строке,
приступим к созданию своей.</p>
<p>Начнём с номера текущего буфера и имени файла, который редактируем:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set statusline=%r%t%{(&amp;mod?<span style="color:#f1fa8c">&#39;*&#39;</span>:<span style="color:#f1fa8c">&#39;&#39;</span>)}
</code></pre></div><p>Разберём полученную строку:</p>
<ul>
<li><code>%r</code>: отображение [RO] если файл доступен только для чтения</li>
<li><code>%t</code>: хвост пути к файлу (имя файла с расширением)</li>
<li><code>%{(&amp;mod?'*':'')}</code>: <code>&amp;mod</code> переменная со значением был ли модифицирован файл,
проверяем если был, отображаем звёздочку, иначе ничего.</li>
</ul>
<p>Таким образом мы уже имеем основную информацию о редактируемом файле.</p>
<p>Дальше как обычно, отобразим справа в статусной строке информацию о кодировке файла,
текущей строке, общее количество строк и тип файла. Это достигается следующим:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set statusline+=%=%{&amp;fenc}\ %l/%L\ %y
</code></pre></div><p>Подробнее о содержимом:</p>
<ul>
<li><code>%=</code>: позволяет выровнять следующий контент по правому краю статусной строки</li>
<li><code>%{&amp;fenc}</code>: отобразит кодировку файла</li>
<li><code>%l</code>: текущая строка, на которой находится курсор</li>
<li><code>%L</code>: всего строк в файле</li>
<li><code>%y</code>: тип файла</li>
</ul>
<h2 id="делаем-статусную-строку-красивее-и-удобнее">Делаем статусную строку красивее и удобнее</h2>
<p>При описании содержимого статусной строки VIM можно использовать возвращаемые
значения функций, а так же скрывать блок контента, если в нём нет данных.</p>
<p>Это будет полезно если отображается текущая ветка GIT например. То есть
если редактируемый файл находится вне репозитория, отображаться ничего не будет.</p>
<p>Для этого существуют группы, начало обозначается как <code>%(</code>, конец как <code>%)</code>.</p>
<p>В итоге конфигурация моей статусной строки выглядит следующим образом:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-vim" data-lang="vim">set stl=[%n]\ 
set stl+=%(%{WebDevIconsGetFileTypeSymbol()}\ %r%t%{(&amp;mod?<span style="color:#f1fa8c">&#39;*&#39;</span>:<span style="color:#f1fa8c">&#39;&#39;</span>)}%)
set stl+=%(\ \|\ %{FugitiveHead()}%)
set stl+=%(\ \|\ %{coc#status()}%)
set stl+=%=%{&amp;fenc}\ %l/%L\ %y
</code></pre></div><p>В примере <code>stl</code> это принятое сокращение для переменной statusline.</p>
<p>Итого уложился в 5 строк. Эта конфигурация покрывает мои нужды.</p>

            </div>
      	]]></turbo:content></item><item turbo="true"><title>Работаем удалённо по SSH на карантине</title><link>https://mikhail-yudin.ru/blog/linux/rabotaem-udalyonno-po-ssh-na-karantine/</link><pubDate>Thu, 16 Apr 2020 00:00:00 +0000</pubDate><guid>https://mikhail-yudin.ru/blog/linux/rabotaem-udalyonno-po-ssh-na-karantine/</guid><description>Работать удалённо начнём в последнюю пятницу перед карантином пока ещё никто не готов. Кто-то не желает переводить сотрудников на удалённую работу, кто-то не умеет или боится этого. А дядя Миша уже всё сделал. =)
Первая попытка настроить удалённый доступ К тому времени у меня уже давно имелся домашний сервер с доступом по SSH. Очень удобно проворачивать всякие штуки. Например обеспечивал постоянный доступ к Termux через ssh тоннель.
Начинать всегда стоит с быстрого способа создать и залить SSH ключ на сервер.</description><turbo:content><![CDATA[
      		<header>
      			<h1>Работаем удалённо по SSH на карантине</h1></header>
            <div class='entry-content'>
              <p>Работать удалённо начнём в последнюю пятницу перед карантином пока ещё никто не готов.
Кто-то не желает переводить сотрудников на удалённую работу, кто-то не умеет или боится этого.
А дядя Миша уже всё сделал. =)</p>
<h2 id="первая-попытка-настроить-удалённый-доступ">Первая попытка настроить удалённый доступ</h2>
<p>К тому времени у меня уже давно имелся домашний сервер с доступом по SSH. Очень удобно проворачивать всякие штуки.
Например обеспечивал <a href="/blog/android/persistent-termux-access-through-ssh-tunnel">постоянный доступ к Termux через ssh тоннель</a>.</p>
<p>Начинать всегда стоит с <a href="/blog/linux/zalit-ssh-klyuch-na-server">быстрого способа создать и залить SSH ключ на сервер</a>.</p>
<p>Как это сделали, возвращаемся к посту про <a href="/blog/android/persistent-termux-access-through-ssh-tunnel">постоянный доступ к Termux через ssh тоннель</a>, только на этот раз делаем то же самое на рабочей машине.</p>
<p>Чтобы предусмотреть потерю соединения из-за отключения сети или других причин, советую поставить autossh в автозагрузку при старте системы или поднятию сети любым удобным для вас способом.
В своём Arch Linux добавил в systemd сервис:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-ini" data-lang="ini"><span style="color:#ff79c6">[Unit]</span>
<span style="color:#50fa7b">Description</span><span style="color:#ff79c6">=</span><span style="color:#f1fa8c">AutoSSH service for a reverse tunnel</span>
<span style="color:#50fa7b">After</span><span style="color:#ff79c6">=</span><span style="color:#f1fa8c">network.target</span>

<span style="color:#ff79c6">[Service]</span>
<span style="color:#50fa7b">ExecStart</span><span style="color:#ff79c6">=</span><span style="color:#f1fa8c">/usr/bin/autossh -M 0 -q -N -o &#34;ServerAliveInterval 60&#34; -o &#34;ServerAliveCountMax 3&#34; myserver</span>

<span style="color:#ff79c6">[Install]</span>
<span style="color:#50fa7b">WantedBy</span><span style="color:#ff79c6">=</span><span style="color:#f1fa8c">multi-user.target</span>
</code></pre></div><p>Таким образом, autossh запустится после поднятия сети. Флаг <code>-M 0</code> говорит о том что я не хочу использовать дополнительный порт для проверки живости соединения.
Пускай об этом позаботится ssh (<code>ServerAliveInterval</code>, <code>ServerAliveCountMax</code>). Далее указан алиас <code>myserver</code>, который ранее определяли в <code>~/.ssh/config</code>.</p>
<p>Далее произведём тестовый запуск службы:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">sudo systemctl start autossh.service
</code></pre></div><p>Если не было ошибок, добавим службу в автозапуск:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">sudo systemctl start autossh.service
</code></pre></div><p>Ещё советую протестировать соединение через наш обратный (reverse) SSH тоннель и поставить на выполнение что-то простое типа: <code>watch ps</code>. Это предотвратит &ldquo;залипание&rdquo; соединения. Такое происходит когда соединение установлено, а пакетов нет. И как понял, такое случается по специфике работы NAT: он убирает связь между хостами, а соединение об этом ничего не знает.</p>
<p>Сделав это, был доволен как слон собственно настроенному удалённому доступу к рабочей машине.</p>
<p>Однако, что-то пошло не так и примерно через неделю соединение отвалилось.
Пришлось доставать админа, чтобы получить доступ к внутренней сети хоть каким-нибудь способом. На помощь опять же пришёл SSH!</p>
<h2 id="настраиваем-проброс-портов-через-промежуточный-сервер">Настраиваем проброс портов через промежуточный сервер</h2>
<p>Самым быстрым способом оказалось использование прямого доступа по SSH к удалённой машине. Только пробросили порт не напрямую к рабочему компу, а к одному из внутренних серверов. Что же делать дальше? Ведь я хочу получить доступ к development серверу, а корячиться через всякие serveo или ngrok не кошерно&hellip;</p>
<p>На помощь пришла одна из возможностей ssh туннелирования. Эта штука называется ProxyJump. Настраивается это там же, в <code>~/.ssh/config</code> и очень просто:</p>
<pre><code class="language-conf" data-lang="conf">### Доступен напрямую
Host betajump
  HostName jumphost1.example.org
 
### Будет доступен через jumphost1.example.org (betajump)
Host behindbeta
  HostName behindbeta.example.org
  ProxyJump  betajump
</code></pre><p>Для behindbeta из примера проброс портов с него настраивается так же, как для обычного хоста.</p>
<p>Всё было круто. Но редактировать файлы по ssh как? Правда, надо. Хотя можно работать через репозиторий, но иногда хочется поковырять файлы на удалённой машине. Можно <code>vim</code>, <code>nano</code> или <code>mcedit</code> накрайняк. Но не так удобно. На помощь приходит утилита sshfs!</p>
<h2 id="получаем-доступ-к-удалённой-файловой-системе-через-sshfs">Получаем доступ к удалённой файловой системе через sshfs</h2>
<p>Сначала ставим утилиту если не установлена. Затем создаём директорию, куда будем монтировать. Например</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">sudo mkdir /mnt/remote_work
</code></pre></div><p>ну или как удобнее и привычнее.
Затем монтируем как любую другую файловую систему:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">sudo sshfs behindbeta:/var/www /mnt/remote_work
</code></pre></div><p>После двоеточия идёт путь к монтируемой директории на удалённой машине из примера с ProxyJump.</p>
<h2 id="в-заключение">В заключение</h2>
<p>Таким образом я работаю удалённо уже почти месяц на момент написания поста. Немного медленно правда, зато работа идёт.</p>

            </div>
      	]]></turbo:content></item><item turbo="true"><title>Быстрый способ создать и залить SSH ключ на сервер</title><link>https://mikhail-yudin.ru/blog/linux/zalit-ssh-klyuch-na-server/</link><pubDate>Mon, 26 Aug 2019 00:00:00 +0000</pubDate><guid>https://mikhail-yudin.ru/blog/linux/zalit-ssh-klyuch-na-server/</guid><description>Создадим ключ для доступа к серверу SSH чтобы входить на сервер без пароля. Это безопаснее и быстрее.
Создание ключа Ключ с достаточной стойкостью создаём так:
ssh-keygen -t rsa -b 2048 -f ~/.ssh/host_id_rsa Заменить в названии ключа host на имя хоста, для которого ключ предназначен.
Заливка ключа на сервер Залить ключ можно командой:
ssh-copy-id -i ~/.ssh/host_id_rsa.pub user@host Так же заменить host на имя удалённого хоста в названии файла и адреса подключения, user на имя пользователя, под которым производится вход.</description><turbo:content><![CDATA[
      		<header>
      			<h1>Быстрый способ создать и залить SSH ключ на сервер</h1></header>
            <div class='entry-content'>
              <p>Создадим ключ для доступа к серверу SSH чтобы входить на сервер без пароля. Это безопаснее и быстрее.</p>
<h2 id="создание-ключа">Создание ключа</h2>
<p>Ключ с достаточной стойкостью создаём так:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">ssh-keygen -t rsa -b <span style="color:#bd93f9">2048</span> -f ~/.ssh/host_id_rsa
</code></pre></div><p>Заменить в названии ключа <code>host</code> на имя хоста, для которого ключ предназначен.</p>
<h2 id="заливка-ключа-на-сервер">Заливка ключа на сервер</h2>
<p>Залить ключ можно командой:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">ssh-copy-id -i ~/.ssh/host_id_rsa.pub user@host
</code></pre></div><p>Так же заменить <code>host</code> на имя удалённого хоста в названии файла и адреса подключения, <code>user</code> на имя пользователя, под которым производится вход.
Если используется порт отличный от стандартного 22, дописать параметр например <code>-p 2222</code> в конец команды.</p>

            </div>
      	]]></turbo:content></item><item turbo="true"><title>Acer Aspire v5 122p alsa, mpd</title><link>https://mikhail-yudin.ru/blog/linux/acer-aspire-v5-122p-alsa-mpd/</link><pubDate>Sat, 26 Dec 2015 00:00:00 +0000</pubDate><guid>https://mikhail-yudin.ru/blog/linux/acer-aspire-v5-122p-alsa-mpd/</guid><description>How to get it work Alsa ~/.asoundrc:
pcm.dsp { type plug slave.pcm &amp;quot;dmix&amp;quot; } /etc/modprobe.d/50-alsa.conf:
options snd-hda-intel index=1 So, HDMI is second device, and sources mixings by dmix
mpd /etc/mpd.conf: music_directory &amp;quot;/home/{username}/Music&amp;quot; playlist_directory &amp;quot;/home/{username}/.mpd/playlists&amp;quot; db_file &amp;quot;/home/{username}/.mpd/mpd.db&amp;quot; log_file &amp;quot;/home/{username}/.mpd/mpd.log&amp;quot; audio_output { type &amp;quot;alsa&amp;quot; name &amp;quot;ALSA Device&amp;quot; } Last steps remove pulseaudio, if exists, and:
mkdir -p ~/.mpd/playlists sudo systemctl enable mpd sudo systemctl start mpd mpc load &amp;lt;playlist_name&amp;gt; mpc play 1</description><turbo:content><![CDATA[
      		<header>
      			<h1>Acer Aspire v5 122p alsa, mpd</h1></header>
            <div class='entry-content'>
              <h2 id="how-to-get-it-work">How to get it work</h2>
<h3 id="alsa">Alsa</h3>
<p>~/.asoundrc:</p>
<pre><code class="language-conf" data-lang="conf">pcm.dsp {  
  type plug
  slave.pcm &quot;dmix&quot;
}  
</code></pre><p>/etc/modprobe.d/50-alsa.conf:</p>
<pre><code class="language-conf" data-lang="conf">options snd-hda-intel index=1  
</code></pre><p><em>So, HDMI is second device, and sources mixings by dmix</em></p>
<h3 id="mpd">mpd</h3>
<p>/etc/mpd.conf: </p>
<pre><code class="language-conf" data-lang="conf">music_directory         &quot;/home/{username}/Music&quot;  
playlist_directory      &quot;/home/{username}/.mpd/playlists&quot;  
db_file                 &quot;/home/{username}/.mpd/mpd.db&quot;  
log_file                &quot;/home/{username}/.mpd/mpd.log&quot;  

audio_output {  
        type                    &quot;alsa&quot;  
        name                    &quot;ALSA Device&quot;  
}  
</code></pre><h3 id="last-steps">Last steps</h3>
<p><u>remove pulseaudio</u>, if exists, and:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:2;-o-tab-size:2;tab-size:2"><code class="language-shell" data-lang="shell">mkdir -p ~/.mpd/playlists  
sudo systemctl <span style="color:#8be9fd;font-style:italic">enable</span> mpd
sudo systemctl start mpd

mpc load &lt;playlist_name&gt;

mpc play <span style="color:#bd93f9">1</span>
</code></pre></div>
            </div>
      	]]></turbo:content></item></channel></rss>