<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Архивы ubuntu - Admnotes.ru</title>
	<atom:link href="https://admnotes.ru/tag/ubuntu/feed/" rel="self" type="application/rss+xml" />
	<link>https://admnotes.ru/tag/ubuntu/</link>
	<description>Заметки системного администратора</description>
	<lastBuildDate>Fri, 08 Nov 2024 09:55:55 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://admnotes.ru/wp-content/uploads/2022/12/cropped-logo2-32x32.png</url>
	<title>Архивы ubuntu - Admnotes.ru</title>
	<link>https://admnotes.ru/tag/ubuntu/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Запись рабочего стола и камеры ffmpeg Ubuntu</title>
		<link>https://admnotes.ru/2023/06/28/zapis-rabochego-stola-i-kamery-ffmpeg-ubuntu/</link>
					<comments>https://admnotes.ru/2023/06/28/zapis-rabochego-stola-i-kamery-ffmpeg-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[mouclass]]></dc:creator>
		<pubDate>Wed, 28 Jun 2023 09:42:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[mikrotik]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://admnotes.ru/?p=535</guid>

					<description><![CDATA[<p>Появилась необходимость в записи рабочего стола, ip-камеры и графика скорости на портах в реальном времени, единственным источником звука будет камера. На помощь пришел ffmpeg,.</p>
<p>Сообщение <a href="https://admnotes.ru/2023/06/28/zapis-rabochego-stola-i-kamery-ffmpeg-ubuntu/">Запись рабочего стола и камеры ffmpeg Ubuntu</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<!-- Yandex.RTB R-A-2197944-5 -->
<div id="yandex_rtb_R-A-2197944-5"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-5",
        "renderTo": "yandex_rtb_R-A-2197944-5"
    })
})
</script>



<p>Появилась необходимость в записи рабочего стола, ip-камеры и графика скорости на портах в реальном времени, единственным источником звука будет камера. На помощь пришел ffmpeg, а также несколько инструментов таких как snmpwalk, gnuplot. Все это буду делать на Ubuntu 20.04. Будьте внимательны в 16 Ubuntu ffmpeg старый, его нужно обновить вручную:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sudo add-apt-repository ppa:jonathonf/ffmpeg-4
sudo apt-get update
sudo apt-get install ffmpeg</code></pre></div>



<figure class="wp-block-image size-large"><a href="https://admnotes.ru/wp-content/uploads/2023/06/1-2.jpg"><img fetchpriority="high" decoding="async" width="1024" height="432" src="https://admnotes.ru/wp-content/uploads/2023/06/1-2-1024x432.jpg" alt="" class="wp-image-538" srcset="https://admnotes.ru/wp-content/uploads/2023/06/1-2-1024x432.jpg 1024w, https://admnotes.ru/wp-content/uploads/2023/06/1-2-300x127.jpg 300w, https://admnotes.ru/wp-content/uploads/2023/06/1-2-768x324.jpg 768w, https://admnotes.ru/wp-content/uploads/2023/06/1-2-1536x648.jpg 1536w, https://admnotes.ru/wp-content/uploads/2023/06/1-2-2048x864.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Скриншот из готового результата</figcaption></figure>



<p>Изначально хотелось сделать запуск записи при включении компьютера, но ffmpeg отказывался запускаться, выдавая ошибку (<a href="https://superuser.com/questions/1786384/ffmpeg-0-0-protocol-not-found-did-you-mean-file0-0" target="_blank" rel="noreferrer noopener">тикет</a>), поэтому я решил сделать запуск через ярлык. </p>



<p>Цель записи выявить ошибку при взаимодействии пользователя с каким-то сложным ПО, где необходимо проследить как именно выполняется алгоритм работы.</p>



<p>Хочу заметить, что запись будет происходить внутри локальной сети, камера и компьютер подключены к маршрутизатору напрямую.</p>



<h2 class="wp-block-heading">Камера</h2>



<p>Используется IP-камера Beward B12CR с прошивкой 3.1.0.1.5.18.166. </p>



<p>Для записи будет задействован альтернативный поток со следующими настройками:</p>



<figure class="wp-block-image size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/06/2-1.jpg"><img decoding="async" width="933" height="454" src="https://admnotes.ru/wp-content/uploads/2023/06/2-1.jpg" alt="" class="wp-image-540" srcset="https://admnotes.ru/wp-content/uploads/2023/06/2-1.jpg 933w, https://admnotes.ru/wp-content/uploads/2023/06/2-1-300x146.jpg 300w, https://admnotes.ru/wp-content/uploads/2023/06/2-1-768x374.jpg 768w" sizes="(max-width: 933px) 100vw, 933px" /></a></figure>



<h2 class="wp-block-heading">График</h2>



<p>Для создания графика будем обращаться к этой <a href="https://admnotes.ru/2023/06/27/grafik-po-dannym-iz-mikrotik-cherez-snmp-v-gnuplot-na-ubuntu/" target="_blank" rel="noreferrer noopener">инструкции</a>. У нас должны появиться следующие скрипты &#8211; getDataFromMikrotik.sh, runGnuplot.sh, createGraph.p. Все скрипты будут лежать в папке /home/user/record/</p>



<h2 class="wp-block-heading">Папка для записи</h2>



<p>Для создания папки я решил выделить код в отдельный скрипт createPath.sh:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>#!/bin/bash
user=test
rm -f /home/$user/record/path
mkdir /home/$user/$(date +%d-%m-%y)-record/
mkdir /home/$user/$(date +%d-%m-%y)-record/$(date +%H-%M)
echo /home/$user/$(date +%d-%m-%y)-record/$(date +%H-%M) &gt;&gt; /home/$user/record/path</code></pre></div>



<p>user=test &#8211; имя пользователя в системе Ubuntu. Скрипт проверяет наличие файла path, если он есть, то удаляет его. Затем создается папка с именем в формате &#8220;28-06-2023-record&#8221;, а внутри этой папки создается другая папка с именем в формате &#8220;11-59&#8221;. Получившийся путь /home/test/28-06-2023-record/11-59 записывает в файл /home/test/record/path. Этот путь будут использовать другие скрипты, чтобы класть туда свои новые файлы.</p>



<h2 class="wp-block-heading">Запись</h2>



<p>Для начала установим необходимые пакеты:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sudo apt install ffmpeg snmp gnuplot</code></pre></div>



<p>Создадим скрипт startRec.sh, который будет начинать запись:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>#!/bin/bash
started=$(ps aux | grep &#39;[g]etDataFromMikrotik.sh&#39; | awk &#39;{print $2}&#39;)
if [[ -n $started ]] 
then
	echo &quot;alredy started&quot;
	exit
fi
echo &quot;starting&quot;
bash /home/user/record/createPath.sh &gt;&gt; /home/user/record/createPath.log
path=$(cat /home/user/record/path)
width=$(xrandr | grep primary | cut -f 4 -d &quot; &quot; | cut -f 1 -d &quot;+&quot; | cut -f 1 -d &quot;x&quot;)
height=$(xrandr | grep primary | cut -f 4 -d &quot; &quot; | cut -f 1 -d &quot;+&quot; | cut -f 2 -d &quot;x&quot;)

if [ $(($height-360)) -ge 480 ]
then
	heightGraph=480
else
	heightGraph=$(($height-360))
fi

bash /home/user/record/getDataFromMikrotik.sh &gt;&gt; $path/getDataFromMikrotik.log 2&gt;&1 &lt; /dev/null &

bash /home/user/record/runGnuplot.sh &gt;&gt; $path/runGnuplot.log 2&gt;&1 &lt; /dev/null &


ffmpeg \
-video_size $width\x$height-f x11grab -r 5 -i :0.0 \
-rtsp_transport tcp -i &quot;rtsp://admin:password@192.168.1.199:554/av0_1&quot; \
-f image2 -loop 1 -i $path/graph.png \
-filter_complex &quot;[0:v]pad=iw+640:ih[desk]; \
		[desk][1:v]overlay=$width:0[deskcam]; \
		[2:v]scale=640:$heightGraph[graph]; \
		[deskcam][graph]overlay=$width:360[all]; \
		[all]drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf:text=&#39;%{pts\:gmtime\:$(($(date +%s)+18000))\:%d-%m-%Y %T}&#39;:fontcolor=white@0.8:x=7:y=7:borderw=2:bordercolor=black[v]&quot; \
-map &quot;[v]&quot; \
-map 1:a \
-c:v libx264 -pix_fmt yuv420p -crf 40 -preset ultrafast \
-c:a copy \
$path/merged.mkv &gt;&gt; $path/merged.log 2&gt;&1 &lt; /dev/null &</code></pre></div>



<pre class="wp-block-code"><code>Сначала мы проверяем запущена ли уже запись, если да, то показываем "already started", если нет, то показываем "starting" и запускаем запись. Проверка осуществляется с помощью ps aux, он проверяет запущен ли процесс getDataFromMikrotik.sh.</code></pre>



<p>Затем создается путь с помощью скрипта createPath.sh, логи которого записываются в файл с таким же именем, но с расширением log. Переменная path присваивает созданный путь.</p>



<p>После этого узнаем разрешение экрана командой xrandr, фильтруем вывод, разбираем его на ширину и высоту.</p>



<p>Размер видео с камеры 640&#215;360, размер изображения графика 640&#215;480. При высоте экрана 1080 пикселей видео с камеры и график полностью помещаются при своих стандартных высотах, но если размер экрана будет, например, 720 пикселей, то график обрежется снизу, так как 360+480=840, 840-720=120 пикселей обрезалось. Поэтому мы проверяем сколько осталось пикселей по высоте, если осталось меньше 480, тогда heightGraph будет остаток по высоте (сожмем график по высоте), если больше 480, то heightGraph будет всегда 480, чтобы не растягивать. Для меня важно, чтобы помещалось видео с камеры. </p>



<p>Вот так будет выглядеть график при разрешении 1280&#215;720:</p>



<figure class="wp-block-image size-large"><a href="https://admnotes.ru/wp-content/uploads/2023/06/3-1.jpg"><img decoding="async" width="1024" height="384" src="https://admnotes.ru/wp-content/uploads/2023/06/3-1-1024x384.jpg" alt="" class="wp-image-541" srcset="https://admnotes.ru/wp-content/uploads/2023/06/3-1-1024x384.jpg 1024w, https://admnotes.ru/wp-content/uploads/2023/06/3-1-300x113.jpg 300w, https://admnotes.ru/wp-content/uploads/2023/06/3-1-768x288.jpg 768w, https://admnotes.ru/wp-content/uploads/2023/06/3-1-1536x576.jpg 1536w, https://admnotes.ru/wp-content/uploads/2023/06/3-1.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">График сжался, но читабельность сохраняется.</figcaption></figure>



<p>Далее запускается скрипт getDataFromMikrotik.sh, он берет данные с маршрутизатора и записывает их в data.txt, попутно пишется одноименный лог файл. </p>



<p>Следом выполняется runGnuplot.sh, который запускает gnuplot с файлом createGraph.p внутри. Все это с задержкой в 1 секунду. Тоже пишется лог файл. Есть погрешности в задержке, для меня не критично.</p>



<p>И, наконец, ffmpeg: </p>



<p><strong>-video_size $width\x$height-f x11grab -r 5 -i :0.0 \</strong> &#8211; с помощью x11grab делаем запись рабочего стола с входящей частотой 5 fps.</p>



<p><strong>-rtsp_transport tcp -i &#8220;rtsp://admin:password@192.168.1.199:554/av0_1&#8221; -r 5 \</strong> &#8211; запись с камеры. admin &#8211; имя пользователя, password &#8211; пароль, 192.168.1.199:554 &#8211; ip-адрес камеры и порт (порт должен быть проброшен), av0_1 &#8211; альтернативный поток (av0_0 &#8211; основной поток).</p>



<p><strong>-f image2 -loop 1 -i $path/graph.png \</strong> &#8211; берем график и по мере обновления добавляем в общее видео.</p>



<p><strong>-filter_complex &#8220;[0:v]pad=iw+640:ih[desk]; \</strong> &#8211; создает на видео с рабочим столом черный фон (desk) с шириной, увеличенной на 640 пикселей, и сохраняет его размеры.</p>



<p><strong>[<strong>desk</strong>][1:v]overlay=$width:0[deskcam]; \</strong> &#8211; накладывает видео поток с индексом 1 (1:v &#8211; видео с камеры) на черный фон рабочего стола (desk), смещая его на $width пикселей вправо. Результат сохраняется в deskcam.</p>



<p><strong>[2:v]scale=640:$heightGraph[graph]; \</strong> &#8211; изменяет размер видео потока с индексом 2 (2:v &#8211; график) до ширины 640 пикселей и высоты $heightGraph пикселей. Результат сохраняется в graph.</p>



<p><strong>[<strong>deskcam</strong>][<strong>graph</strong>]overlay=$width:360[all]; \</strong> &#8211; накладывает видео поток graph на deskcam, смещая его на $width пикселей вправо и на 360 пикселей вниз (высота видео с камеры). Результат сохраняется в all.</p>



<p><strong>[all]drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf:text=&#8217;%{pts\:gmtime\:$(($(date +%s)+18000))\:%d-%m-%Y  %T}&#8217;:fontcolor=white@0.8:x=7:y=7:borderw=2:bordercolor=black[v]&#8221; \</strong> &#8211; добавляет текст на видео поток all. Текст содержит текущую дату и время в формате &#8220;день-месяц-год час:минута:секунда&#8221;, смещенное на 5 часов вперед. Текст отображается белым цветом с прозрачностью 0.8, с толщиной обводки 2 пикселя и черной обводкой. Результат сохраняется в v.</p>



<p><strong>-map &#8220;[v]&#8221; \</strong> &#8211; выбирает результат из filter_complex в качестве видео потока для кодирования.</p>



<p><strong>-map 1:a \</strong> &#8211; выбирает аудио поток с индексом 1 (1:a) для кодирования. </p>



<p><strong>-c:v libx264 -pix_fmt yuv420p -crf 40 -preset ultrafast \ </strong>&#8211; устанавливает кодек видео (libx264), формат пикселей (yuv420p), качество видео (crf 40, где более высокое значение означает более низкое качество), и скорость кодирования (ultrafast, самая быстрая скорость).</p>



<p><strong>-c:a copy \</strong> &#8211; копирует аудио поток без изменений.</p>



<p><strong>$path/merged.mkv</strong> &#8211; указывает путь и имя файла, в который будет сохранен результат.</p>



<p><strong>&gt;&gt; $path/merged.log 2&gt;&amp;1 &lt; /dev/null &amp;</strong> &#8211; перенаправляет вывод команды в файл merged.log, игнорирует ввод данных (/dev/null), и запускает процесс в фоновом режиме (&amp;).</p>



<p>После запуска записи структура папок будет выглядеть так:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="853" height="476" src="https://admnotes.ru/wp-content/uploads/2023/06/4-1.jpg" alt="" class="wp-image-542" srcset="https://admnotes.ru/wp-content/uploads/2023/06/4-1.jpg 853w, https://admnotes.ru/wp-content/uploads/2023/06/4-1-300x167.jpg 300w, https://admnotes.ru/wp-content/uploads/2023/06/4-1-768x429.jpg 768w" sizes="auto, (max-width: 853px) 100vw, 853px" /></figure>



<h2 class="wp-block-heading">Остановка записи</h2>



<p>Создадим скрипт stopRec.sh:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>#!/bin/bash
kill $(ps aux | grep &#39;[g]etDataFromMikrotik.sh&#39; | awk &#39;{print $2}&#39;)
kill $(ps aux | grep &#39;[f]fmpeg -video_size&#39; | awk &#39;{print $2}&#39;)
kill $(ps aux | grep &#39;[r]unGnuplot.sh&#39; | awk &#39;{print $2}&#39;)</code></pre></div>



<h2 class="wp-block-heading">Итог</h2>



<p>Преимущество скрипта записи startRec.sh в том, что можно выключить компьютер, убить процесс, зависнуть и т.д, но запись будет всегда сохранена, так как видео сразу пишется на диск.</p>


<!-- Yandex.RTB R-A-2197944-6 -->
<div id="yandex_rtb_R-A-2197944-6"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-6",
        "renderTo": "yandex_rtb_R-A-2197944-6"
    })
})
</script>
<p>Сообщение <a href="https://admnotes.ru/2023/06/28/zapis-rabochego-stola-i-kamery-ffmpeg-ubuntu/">Запись рабочего стола и камеры ffmpeg Ubuntu</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://admnotes.ru/2023/06/28/zapis-rabochego-stola-i-kamery-ffmpeg-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>График по данным из Mikrotik через SNMP в GnuPlot на Ubuntu</title>
		<link>https://admnotes.ru/2023/06/27/grafik-po-dannym-iz-mikrotik-cherez-snmp-v-gnuplot-na-ubuntu/</link>
					<comments>https://admnotes.ru/2023/06/27/grafik-po-dannym-iz-mikrotik-cherez-snmp-v-gnuplot-na-ubuntu/#comments</comments>
		
		<dc:creator><![CDATA[mouclass]]></dc:creator>
		<pubDate>Tue, 27 Jun 2023 10:13:13 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[mikrotik]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://admnotes.ru/?p=523</guid>

					<description><![CDATA[<p>В этой статье я расскажу как построить график в Linux при помощи gnuplot, взяв любые данные из маршрутизатора Mikrotik по SNMP. Мне нужно было.</p>
<p>Сообщение <a href="https://admnotes.ru/2023/06/27/grafik-po-dannym-iz-mikrotik-cherez-snmp-v-gnuplot-na-ubuntu/">График по данным из Mikrotik через SNMP в GnuPlot на Ubuntu</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<!-- Yandex.RTB R-A-2197944-5 -->
<div id="yandex_rtb_R-A-2197944-5"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-5",
        "renderTo": "yandex_rtb_R-A-2197944-5"
    })
})
</script>



<p>В этой статье я расскажу как построить график в Linux при помощи gnuplot, взяв любые данные из маршрутизатора Mikrotik по SNMP. Мне нужно было строить график скорости по портам ether1 и wlan каждую секунду, поэтому график, который можно взять из самого микротика не подходил, так как он может дать только за 5 минут, и строит график в большом диапазоне.</p>



<figure class="wp-block-image size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/06/5.jpg"><img loading="lazy" decoding="async" width="640" height="480" src="https://admnotes.ru/wp-content/uploads/2023/06/5.jpg" alt="" class="wp-image-528" srcset="https://admnotes.ru/wp-content/uploads/2023/06/5.jpg 640w, https://admnotes.ru/wp-content/uploads/2023/06/5-300x225.jpg 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></figure>



<h2 class="wp-block-heading">Настройка роутера</h2>



<p>Для начала включим SNMP на роутере.</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/snmp set enabled=yes</code></pre></div>



<figure class="wp-block-image size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/06/1.jpg"><img loading="lazy" decoding="async" width="446" height="279" src="https://admnotes.ru/wp-content/uploads/2023/06/1.jpg" alt="" class="wp-image-524" srcset="https://admnotes.ru/wp-content/uploads/2023/06/1.jpg 446w, https://admnotes.ru/wp-content/uploads/2023/06/1-300x188.jpg 300w" sizes="auto, (max-width: 446px) 100vw, 446px" /></a></figure>



<p>Если вы будете настраивать на удаленном роутере, то следует пробросить 161 порт, а также настроить разрешенные адреса:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/ip firewall filter
add action=accept chain=input src-address=[addr1] dst-port=161 protocol=udp comment=snmp</code></pre></div>



<p>Где [addr1] &#8211; это ip-адрес сервера, который будет брать данные с маршрутизатора.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://admnotes.ru/wp-content/uploads/2022/12/m5_result.webp"><img loading="lazy" decoding="async" width="1024" height="65" src="https://admnotes.ru/wp-content/uploads/2022/12/m5_result-1024x65.webp" alt="Настройка Firewall на Mikrotik" class="wp-image-419" srcset="https://admnotes.ru/wp-content/uploads/2022/12/m5_result-1024x65.webp 1024w, https://admnotes.ru/wp-content/uploads/2022/12/m5_result-300x19.webp 300w, https://admnotes.ru/wp-content/uploads/2022/12/m5_result-768x49.webp 768w, https://admnotes.ru/wp-content/uploads/2022/12/m5_result.webp 1044w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure></div>


<h2 class="wp-block-heading">Данные</h2>



<p>Определимся с тем, что мы хотим получать. Мне нужны данные по портам ether1 и wlan, чтобы видеть количество Кбит/с.</p>



<p>Чтобы получать эти данные нужно узнать oid &#8211; идентификатор объекта, который содержит какое-то значение. Так как мне нужны порты, то вводим следующее:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/interface print oid</code></pre></div>



<p>Появится список:</p>



<figure class="wp-block-image size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/06/2.jpg"><img loading="lazy" decoding="async" width="580" height="873" src="https://admnotes.ru/wp-content/uploads/2023/06/2.jpg" alt="" class="wp-image-525" srcset="https://admnotes.ru/wp-content/uploads/2023/06/2.jpg 580w, https://admnotes.ru/wp-content/uploads/2023/06/2-199x300.jpg 199w" sizes="auto, (max-width: 580px) 100vw, 580px" /></a></figure>



<p>Нам нужны объекты bytes-in и bytes-out у интерфейса 0 и 1 &#8211; ether1 и wlan соответственно:</p>



<figure class="wp-block-image size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/06/3.jpg"><img loading="lazy" decoding="async" width="572" height="135" src="https://admnotes.ru/wp-content/uploads/2023/06/3.jpg" alt="" class="wp-image-526" srcset="https://admnotes.ru/wp-content/uploads/2023/06/3.jpg 572w, https://admnotes.ru/wp-content/uploads/2023/06/3-300x71.jpg 300w" sizes="auto, (max-width: 572px) 100vw, 572px" /></a></figure>



<p>Запоминаем идентификаторы.</p>



<h2 class="wp-block-heading">Ubuntu SNMP</h2>



<p>Для начала проверим, что мы получаем, если отправим запрос по этим oid&#8217;ам.</p>



<p>Устанавливаем snmp:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>sudo apt install snmp
snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.6.2</code></pre></div>



<p>192.168.1.1 &#8211; адрес маршрутизатора</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="716" height="42" src="https://admnotes.ru/wp-content/uploads/2023/06/4.jpg" alt="" class="wp-image-527" srcset="https://admnotes.ru/wp-content/uploads/2023/06/4.jpg 716w, https://admnotes.ru/wp-content/uploads/2023/06/4-300x18.jpg 300w" sizes="auto, (max-width: 716px) 100vw, 716px" /></figure>



<p>В ответ мы получаем количество полученных байт с момента включения маршрутизатора. Аналогично можно проверить другие oid.</p>



<p>Теперь, чтобы вычислить, сколько Кбит в данную секунду получает или отправляет порт, нужно воспользоваться формулой:</p>



<p>( конечноеЗначение &#8211; начальноеЗначение ) * 8 / 1000</p>



<p>В 1 байте 8 бит, в 1 Килобайте 1000 байт (грубо).</p>



<h2 class="wp-block-heading">Ubuntu data.txt</h2>



<p>Чтобы построить график нужно иметь точки с координатами. В моем случае ось x &#8211; это время, ось y &#8211; скорость в Кбит. Мне нужен график с периодом 20 секунд, чтобы видеть тенденцию, поэтому будут 20 точек (строк) для входящей и исходящей скорости у портов ether1 и wlan. То есть data.txt будет выглядеть так:</p>



<p>12:19:03 234 9174 0 0<br>12:19:04 181 7980 0 0<br>12:19:05 10 13 0 0<br>12:19:07 34 8 0 0 &#8230;</p>



<p>1 колонка &#8211; время, 2 &#8211; bytes-out ether1, 3 &#8211; bytes-in ether1, 4 &#8211; bytes-out wlan, 5 &#8211; bytes-in wlan</p>



<p> Создадим скрипт getDataFromMikrotik.sh для формирования data.txt:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>#!/bin/bash
rm -f data.txt
#удаляем старый data.txt, если он есть

while true; do
	bytesRxEther1Old=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.6.2 | awk &#39;NF&gt;1{print $NF}&#39;)
	bytesTxEther1Old=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.10.2 | awk &#39;NF&gt;1{print $NF}&#39;)
	bytesRxWlanOld=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.6.1 | awk &#39;NF&gt;1{print $NF}&#39;)
	bytesTxWlanOld=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.10.1 | awk &#39;NF&gt;1{print $NF}&#39;)
	sleep 1
	bytesRxEther1New=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.6.2 | awk &#39;NF&gt;1{print $NF}&#39;)
	bytesTxEther1New=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.10.2 | awk &#39;NF&gt;1{print $NF}&#39;)
	bytesRxWlanNew=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.6.1 | awk &#39;NF&gt;1{print $NF}&#39;)
	bytesTxWlanNew=$(snmpwalk -v1 -cpublic 192.168.1.1 1.3.6.1.2.1.31.1.1.1.10.1 | awk &#39;NF&gt;1{print $NF}&#39;)
	echo $(date +%H:%M:%S) $(( ($bytesTxEther1New-$bytesTxEther1Old)*8/1000 )) $(( ($bytesRxEther1New-$bytesRxEther1Old)*8/1000 )) $(( ($bytesTxWlanNew-$bytesTxWlanOld)*8/1000 )) $(( ($bytesRxWlanNew-$bytesRxWlanOld)*8/1000 )) &gt;&gt; data.txt
	
	countLines=$(wc -l data.txt | cut -f 1 -d &quot; &quot; )
	
	if [ $countLines -ge 21 ]; then
		tail -n +2 data.txt &gt; temp.txt && mv temp.txt data.txt
	fi
done</code></pre></div>



<p>Команда tail -n +2 выводит data.txt без первой строчки и сохраняет вывод в temp.txt, затем temp.txt заменяет data.txt.</p>



<h2 class="wp-block-heading">gnuplot</h2>



<p>Устанавливаем gnuplot:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sudo apt install gnuplot</code></pre></div>



<p>Создаем скрипт createGraph.p для построения графиков:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>#!/gnuplot
set terminal png
set output &#39;graph.png&#39;

set size 1, 1 # пропорции изображения
set multiplot # обозначаем, что строим несколько графиков

set size 1, 0.5 # пропорции первого графика - ширина, высота
set origin 0, 0.5 # начальные координаты графика
set title &quot;ether1&quot;
set xdata time # обозначаем x как временную ось
set timefmt &#39;%H:%M:%S&#39;
set format x &quot;%H:%M:%S&quot;
set xlabel &quot;Time&quot;
set ylabel &quot;Kbps&quot;
set xtics right rotate by 30 # поворачиваем подписи к оси x на 30 градусов вправо
set grid ytics xtics # добавляем сетку
set yrange [0:20000]
plot &quot;data.txt&quot; using 1:2 title &quot;Tx&quot; with filledcurves x1 fs solid 0.5 lc rgb &#39;red&#39;, &quot;data.txt&quot; using 1:3 title &quot;Rx&quot; with filledcurves x1 fs solid 0.5 lc rgb &#39;blue&#39;

# using 1:2 - использовать 1 и 2 колонку в файле data.txt

set size 1, 0.5
set origin 0, 0
set title &quot;wlan&quot;
set xdata time
set timefmt &#39;%H:%M:%S&#39;
set format x &quot;%H:%M:%S&quot;
set xlabel &quot;Time&quot;
set ylabel &quot;Kbps&quot;
set xtics right rotate by 30
set grid ytics xtics
set yrange [0:20000]
plot &quot;data.txt&quot; using 1:4 title &quot;Tx&quot; with filledcurves x1 fs solid 0.5 lc rgb &#39;red&#39;, &quot;data.txt&quot; using 1:5 title &quot;Rx&quot; with filledcurves x1 fs solid 0.5 lc rgb &#39;blue&#39;</code></pre></div>



<p>Сохраняем скрипт, запускаем скрипт getDataFromMikrotik, ждем 20 секунд, чтобы накопить данные, желательно при этом иметь нагрузку на порты для наглядности. Затем рисуем график:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>gnuplot createGraph.p</code></pre></div>



<pre class="wp-block-code"><code>Получаем график graph.png</code></pre>



<figure class="wp-block-image size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/06/5-1.jpg"><img loading="lazy" decoding="async" width="640" height="480" src="https://admnotes.ru/wp-content/uploads/2023/06/5-1.jpg" alt="" class="wp-image-530" srcset="https://admnotes.ru/wp-content/uploads/2023/06/5-1.jpg 640w, https://admnotes.ru/wp-content/uploads/2023/06/5-1-300x225.jpg 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></figure>



<h2 class="wp-block-heading">Рисуем каждую секунду с заменой</h2>



<p>Чтобы рисовать график с задержкой в 1 секунду, то есть с погрешностью, создадим скрипт runGnuplot.sh:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>#!/bin/bash
while true;
do
	gnuplot createGraph.p
	sleep 1
done</code></pre></div>



<p>Изображение будет автоматически заменяться на новое.</p>



<h2 class="wp-block-heading">Рисуем каждую секунду в новый файл</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>#!/bin/bash
while true;
do
	gnuplot createGraph.p
	mv graph.png /graph/graph-$(date +%H-%M-%S).png
done</code></pre></div>



<p>В этом случае каждый новый файл будет перемещаться в предварительно созданную папку graph с именем вида graph-10-49-03.png</p>



<p>Графики объединенные в видео с помощью ffmpeg:</p>



<figure class="wp-block-video"><video controls src="https://admnotes.ru/wp-content/uploads/2023/06/merged.mkv-2023-06-29-09-43-43_edit.mp4"></video></figure>


<!-- Yandex.RTB R-A-2197944-6 -->
<div id="yandex_rtb_R-A-2197944-6"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-6",
        "renderTo": "yandex_rtb_R-A-2197944-6"
    })
})
</script>
<p>Сообщение <a href="https://admnotes.ru/2023/06/27/grafik-po-dannym-iz-mikrotik-cherez-snmp-v-gnuplot-na-ubuntu/">График по данным из Mikrotik через SNMP в GnuPlot на Ubuntu</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://admnotes.ru/2023/06/27/grafik-po-dannym-iz-mikrotik-cherez-snmp-v-gnuplot-na-ubuntu/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="https://admnotes.ru/wp-content/uploads/2023/06/merged.mkv-2023-06-29-09-43-43_edit.mp4" length="113225" type="video/mp4" />

			</item>
		<item>
		<title>Добавить пользователя в sudoers</title>
		<link>https://admnotes.ru/2022/12/08/dobavit-polzovatelya-v-sudoers/</link>
					<comments>https://admnotes.ru/2022/12/08/dobavit-polzovatelya-v-sudoers/#comments</comments>
		
		<dc:creator><![CDATA[mouclass]]></dc:creator>
		<pubDate>Thu, 08 Dec 2022 09:46:40 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://admnotes.ru/?p=207</guid>

					<description><![CDATA[<p>Добавить пользователя в sudoers. Войдите под рутом, затем добавьте пользователя (например &#8211; cat) командой: Следуйте подсказкам в терминале. После добавления пользователя вводим: Видим, что.</p>
<p>Сообщение <a href="https://admnotes.ru/2022/12/08/dobavit-polzovatelya-v-sudoers/">Добавить пользователя в sudoers</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<!-- Yandex.RTB R-A-2197944-5 -->
<div id="yandex_rtb_R-A-2197944-5"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-5",
        "renderTo": "yandex_rtb_R-A-2197944-5"
    })
})
</script>



<p>Добавить пользователя в <a href="https://help.ubuntu.com/community/Sudoers" target="_blank" rel="noreferrer noopener">sudoers</a>. Войдите под рутом, затем добавьте пользователя (например &#8211; cat) командой:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>adduser cat</code></pre></div>



<p>Следуйте подсказкам в терминале.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_1_wm.jpg"><img loading="lazy" decoding="async" width="600" height="271" src="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_1_wm.jpg" alt="" class="wp-image-644" srcset="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_1_wm.jpg 600w, https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_1_wm-300x136.jpg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></figure></div>


<p>После добавления пользователя вводим:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>groups cat</code></pre></div>



<p>Видим, что пользователь не в группе sudo:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_2_wm.jpg"><img loading="lazy" decoding="async" width="600" height="34" src="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_2_wm.jpg" alt="" class="wp-image-645" srcset="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_2_wm.jpg 600w, https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_2_wm-300x17.jpg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></figure></div>


<p>Добавим пользователя в группу sudo:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>adduser cat sudo</code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_3_wm.jpg"><img loading="lazy" decoding="async" width="600" height="66" src="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_3_wm.jpg" alt="" class="wp-image-646" srcset="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_3_wm.jpg 600w, https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_3_wm-300x33.jpg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></figure></div>


<p>Еще раз вводим:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>groups cat</code></pre></div>



<p>Теперь пользователь может использовать sudo.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_4_wm.jpg"><img loading="lazy" decoding="async" width="600" height="48" src="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_4_wm.jpg" alt="" class="wp-image-647" srcset="https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_4_wm.jpg 600w, https://admnotes.ru/wp-content/uploads/2023/11/Screenshot_4_wm-300x24.jpg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></figure></div>

<!-- Yandex.RTB R-A-2197944-6 -->
<div id="yandex_rtb_R-A-2197944-6"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-6",
        "renderTo": "yandex_rtb_R-A-2197944-6"
    })
})
</script>
<p>Сообщение <a href="https://admnotes.ru/2022/12/08/dobavit-polzovatelya-v-sudoers/">Добавить пользователя в sudoers</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://admnotes.ru/2022/12/08/dobavit-polzovatelya-v-sudoers/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Убрать автоматическое добавление принтеров Ubuntu 20.04</title>
		<link>https://admnotes.ru/2022/12/04/ubrat-avtomaticheskoe-dobavlenie-printerov-ubuntu-20-04/</link>
					<comments>https://admnotes.ru/2022/12/04/ubrat-avtomaticheskoe-dobavlenie-printerov-ubuntu-20-04/#respond</comments>
		
		<dc:creator><![CDATA[mouclass]]></dc:creator>
		<pubDate>Sun, 04 Dec 2022 06:15:06 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">http://admnotes.ru/?p=104</guid>

					<description><![CDATA[<p>Убрать автоматическое добавление принтеров Ubuntu 20.04. Нужно чтобы система не добавляла принтеры, которые обнаруживает в локальной сети. Открываем терминал (Ctrl + Alt + T).</p>
<p>Сообщение <a href="https://admnotes.ru/2022/12/04/ubrat-avtomaticheskoe-dobavlenie-printerov-ubuntu-20-04/">Убрать автоматическое добавление принтеров Ubuntu 20.04</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<!-- Yandex.RTB R-A-2197944-5 -->
<div id="yandex_rtb_R-A-2197944-5"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-5",
        "renderTo": "yandex_rtb_R-A-2197944-5"
    })
})
</script>



<p>Убрать автоматическое добавление принтеров <a href="https://ubuntu.com/server/docs/service-cups" target="_blank" rel="noreferrer noopener">Ubuntu </a><a href="https://ubuntu.com/server/docs/service-cups">20.04</a>.</p>



<p>Нужно чтобы система не добавляла принтеры, которые обнаруживает в локальной сети. Открываем терминал (Ctrl + Alt + T) и вводим команды:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed</code></pre></div>



<p>Команды выполняйте на свой страх и риск.</p>



<p><a href="https://admnotes.ru/tag/linux" target="_blank" rel="noreferrer noopener">Еще о Linux</a></p>
<p>Сообщение <a href="https://admnotes.ru/2022/12/04/ubrat-avtomaticheskoe-dobavlenie-printerov-ubuntu-20-04/">Убрать автоматическое добавление принтеров Ubuntu 20.04</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://admnotes.ru/2022/12/04/ubrat-avtomaticheskoe-dobavlenie-printerov-ubuntu-20-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Пропали все панели Ubuntu 16.04</title>
		<link>https://admnotes.ru/2022/12/03/propali-vse-paneli-ubuntu-16-04/</link>
					<comments>https://admnotes.ru/2022/12/03/propali-vse-paneli-ubuntu-16-04/#respond</comments>
		
		<dc:creator><![CDATA[mouclass]]></dc:creator>
		<pubDate>Sat, 03 Dec 2022 12:21:44 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">http://admnotes.ru/?p=56</guid>

					<description><![CDATA[<p>Если пропали все панели в Ubuntu на рабочем столе &#8211; панель задач с программами и часами, то попробовать запустить терминал (Ctrl +Alt + T),.</p>
<p>Сообщение <a href="https://admnotes.ru/2022/12/03/propali-vse-paneli-ubuntu-16-04/">Пропали все панели Ubuntu 16.04</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Если пропали все панели в Ubuntu на рабочем столе &#8211; панель задач с программами и часами, то попробовать запустить терминал (Ctrl +Alt + T), либо подключиться к компьютеру по SSH, и выполнить следующие команды:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>rm -rf ~/.config/compiz-1/compizconfig/*
shutdown -r now</code></pre></div>



<p>После этого панели должны снова появиться.</p>



<p>Команды выполняйте на свой страх и риск.</p>


<!-- Yandex.RTB R-A-2197944-5 -->
<div id="yandex_rtb_R-A-2197944-5"></div>
<script>
window.yaContextCb.push(() => {
    Ya.Context.AdvManager.render({
        "blockId": "R-A-2197944-5",
        "renderTo": "yandex_rtb_R-A-2197944-5"
    })
})
</script>
<p>Сообщение <a href="https://admnotes.ru/2022/12/03/propali-vse-paneli-ubuntu-16-04/">Пропали все панели Ubuntu 16.04</a> появились сначала на <a href="https://admnotes.ru">Admnotes.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://admnotes.ru/2022/12/03/propali-vse-paneli-ubuntu-16-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
