0x20/ru/Sat, 04 Jun 2016 00:00:00 +0600Как сохранить копию вывода скрипта в лог/ru/posts/2016/Jun/copying-script-output-to-a-logfile.html<p>В некоторых ситуациях бывает нужно перенаправить вывод в <tt class="docutils literal">stdout</tt> и <tt class="docutils literal">stderr</tt> из шел-скрипта в лог, сохранив его при этом и в терминале тоже. Обычно в таких случаях я заворачивал интересующие команды в фигурные скобки и перенаправлял полученную составную команду на вход <tt class="docutils literal">tee</tt>. В скрипте ниже более прямой способ добиться того же самого результата с помощью именованных пайпов.</p> <div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env bash</span> <span class="c1"># stdout и stderr будут перенаправлены в этот файл.</span> <span class="nv">log_file</span><span class="o">=</span><span class="s2">&quot;script.log&quot;</span> <span class="c1"># Завершить скрипт, если какая-либо из команд вернёт ошибку, которая не</span> <span class="c1"># будет обработана.</span> <span class="nb">set</span> -e <span class="c1"># Для создания временного пайпа нет специальной команды, так что заводим</span> <span class="c1"># временную директорию, в которую помещаем пайп.</span> <span class="nv">fifo_dir</span><span class="o">=</span><span class="s2">&quot;</span><span class="k">$(</span>mktemp -d<span class="k">)</span><span class="s2">&quot;</span> <span class="nv">fifo</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">fifo_dir</span><span class="si">}</span><span class="s2">/fifo&quot;</span> mkfifo <span class="s2">&quot;</span><span class="si">${</span><span class="nv">fifo</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># Команда `tee` дублирует все данные, прочитанные из пайпа, и в stdout,</span> <span class="c1"># и в лог-файл.</span> tee <span class="s2">&quot;</span><span class="si">${</span><span class="nv">log_file</span><span class="si">}</span><span class="s2">&quot;</span> &lt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">fifo</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">&amp;</span> <span class="nv">tee_pid</span><span class="o">=</span><span class="nv">$!</span> <span class="c1"># Перенаправляем stdout и stderr в пайп.</span> <span class="nb">exec</span> <span class="p">&amp;</span>&gt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">fifo</span><span class="si">}</span><span class="s2">&quot;</span> cleanup<span class="o">()</span> <span class="o">{</span> <span class="c1"># Запоминаем результат последней команды.</span> <span class="nv">code</span><span class="o">=</span><span class="nv">$?</span> <span class="c1"># Разрешаем функции завершиться, даже если в процессе возникнет ошибка.</span> <span class="nb">set</span> +e <span class="nb">echo</span> <span class="s2">&quot;Exiting with code </span><span class="si">${</span><span class="nv">code</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># Нужно закрыть дескрипторы stdout и stderr, чтобы процесс `tee`</span> <span class="c1"># завершился.</span> <span class="nb">exec</span> 1&gt;<span class="p">&amp;</span>- 2&gt;<span class="p">&amp;</span>- <span class="nb">wait</span> <span class="si">${</span><span class="nv">tee_pid</span><span class="si">}</span> rm -rf <span class="s2">&quot;</span><span class="si">${</span><span class="nv">fifo_dir</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># Здесь можно сделать что-нибудь с получившимся лог-файлом, например:</span> <span class="c1"># cat &quot;${log_file}&quot; | mail -s &quot;${log_file}&quot; user@example.com</span> <span class="nb">exit</span> <span class="si">${</span><span class="nv">code</span><span class="si">}</span> <span class="o">}</span> <span class="c1"># cleanup() вызовется с правильным кодом возврата даже если скрипт будет</span> <span class="c1"># остановлен преждевременно из-за ошибки (см. `set -e` выше).</span> <span class="nb">trap</span> cleanup EXIT <span class="c1"># Здесь должно быть основное тело скрипта.</span> <span class="c1"># Нужно отметить, что, если процесс скрипта будет в какой-то момент</span> <span class="c1"># замещён командой `exec`, функция cleanup() не вызовется, и временные файлы</span> <span class="c1"># не будут удалены.</span> <span class="nv">$@</span> </pre></div> <p>Закрытие выходных дескрипторов и ожидание завершения процесса <tt class="docutils literal">tee</tt> нужно, только если хочется сбросить буферы лог-файла, если с ним будут производиться какие-то дополнительные действия внутри скрипта. Иначе достаточно удалить временную директорию.</p> <p>Есть и другой способ получить аналогичный эффект, используя встроенную в <tt class="docutils literal">bash</tt> команду <tt class="docutils literal">coproc</tt>, который <a class="reference external" href="http://wiki.bash-hackers.org/syntax/keywords/coproc#redirecting_the_output_of_a_script_to_a_file_and_to_the_screen">описан, например, здесь</a> и обсуждение на связанную с <tt class="docutils literal">coproc</tt> тему <a class="reference external" href="http://unix.stackexchange.com/questions/86270/how-do-you-use-the-command-coproc-in-bash">здесь</a>. У него есть определённые преимущества (например, не нужен доступ на запись в директорию для создания временных файлов), но лично я продолжу использовать именованные пайпы, т.к. код с ними выглядит понятнее.</p> Nikita KarnauhovSat, 04 Jun 2016 00:00:00 +0600tag:,2016-06-04:ru/posts/2016/Jun/copying-script-output-to-a-logfile.htmllinuxbashИсправляем вход в адимский интерфейс TP-LINK'а/ru/posts/2016/May/fixing-tp-link-login.html<p>В TP-LINK'е сломали импорт настроек после обновления прошивки. На самом деле, его сломали уже довольно давно (как минимум, в 2014 году, судя по сообщениям с некоторых форумов), но я столкнулся с этой проблемой только недавно, обновив свой WDR3600. Я редко меняю прошивку роутера. Источником проблемы стало изменение способа хранения паролей: теперь они не хранятся в окрытом виде, вместо этого записывается некая хэш-сумма (что, само по себе, хорошо). В результате чего, после восстановления сбэкапленных настроек, пользователи потеряли возможность залогиниться в интерфейс роутера.</p> <p>Одно из возможных решений — сбросить роутер на заводские настройки и повторить кофигурирование по памяти, или списывая с заблаговременно сделанных скриншотов. Подходящих скриншотов у меня не оказалось, а перспектива перенастраивать форвардинг портов и привязку айпишников к MAC-адресам (для выдачи по DHCP) меня не обрадовала.</p> <p>Немного погуглив, я выяснил, что конфиг экспортируется в виде обычного текста, зашифрованного с помощью симметричного шифра (DES-ECB). К счастью, <a class="reference external" href="http://teknoraver.net/software/hacks/tplink/">некие добрые люди</a> уже провели надлежащие исследования, позволяющие его расшифровать. Раскодированный конфиг от старой прошивки состоит из ~1300 пар вида ключ-значение и выглядит примерно так:</p> <div class="highlight"><pre><span></span>lan_ip 192.168.8.200 lan_msk 255.255.255.0 ... lgn_ousr admin lgn_opswd admin lgn_usr ********** lgn_pwd ********** ... </pre></div> <p>Чтобы сконвертировать его обратно, в форму, пригодную для восстановления на роутере, нужно, перед шифрования с помощью того же самого шифра, записать в начало файла его MD5-сумму, а с конца дополнить нулевыми байтами до ближайшей восьмибайтовой границы. Я сделал <a class="reference external" href="https://gist.github.com/NikitaKarnauhov/5d9129f13e7b0e257cfbe93215751c7a#file-tlrecode-sh">удобный скрипт</a> для автоматизации процесса кодирования/декодирования.</p> <p class="cut-begin" id="cut-5">tlrecode.sh</p> <div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env bash</span> <span class="c1"># tlrecode.sh</span> <span class="c1"># Decode and encode TP-LINK router config files.</span> <span class="c1">#</span> <span class="c1"># Creative Commons CC0 License:</span> <span class="c1"># http://creativecommons.org/publicdomain/zero/1.0/</span> <span class="c1">#</span> <span class="c1"># To the extent possible under law, the person who associated CC0 with this</span> <span class="c1"># work has waived all copyright and related or neighboring rights to this work.</span> <span class="nv">in</span><span class="o">=</span><span class="s2">&quot;&quot;</span> <span class="nv">out</span><span class="o">=</span><span class="s2">&quot;&quot;</span> <span class="nv">mode</span><span class="o">=</span><span class="s2">&quot;&quot;</span> <span class="c1"># See http://teknoraver.net/software/hacks/tplink/</span> <span class="nv">key</span><span class="o">=</span><span class="s2">&quot;478DA50BF9E3D2CF&quot;</span> <span class="nv">tmp_template</span><span class="o">=</span><span class="s2">&quot;tlrecode.XXXXXXXXXX&quot;</span> <span class="nv">tmp</span><span class="o">=</span><span class="s2">&quot;&quot;</span> <span class="nv">tmp2</span><span class="o">=</span><span class="s2">&quot;&quot;</span> usage<span class="o">()</span> <span class="o">{</span> cat <span class="s">&lt;&lt;EOF</span> <span class="s">tlrecode.sh</span> <span class="s">Decode and encode TP-LINK router config files.</span> <span class="s">Usage: tlrecode.sh (-e|-d) [-i] INPUT [-o] OUTPUT</span> <span class="s"> -i, --input Input file name.</span> <span class="s"> -o, --output Output file name.</span> <span class="s"> -d, --decode Decoding mode (default).</span> <span class="s"> -e, --encode Encoding mode.</span> <span class="s"> -h, --help Print this message.</span> <span class="s">EOF</span> <span class="o">}</span> error<span class="o">()</span> <span class="o">{</span> <span class="nb">echo</span> <span class="s2">&quot;Error: </span><span class="nv">$1</span><span class="s2">&quot;</span> &gt;<span class="p">&amp;</span>2 <span class="nb">exit</span> 1 <span class="o">}</span> decode<span class="o">()</span> <span class="o">{</span> openssl enc -d -des-ecb -K <span class="s2">&quot;</span><span class="si">${</span><span class="nv">key</span><span class="si">}</span><span class="s2">&quot;</span> -nopad -in <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> -out <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">&amp;&amp;</span> tail -c +17 <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp</span><span class="si">}</span><span class="s2">&quot;</span> &gt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp2</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">&amp;&amp;</span> tr -d <span class="s2">&quot;\000&quot;</span> &lt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp2</span><span class="si">}</span><span class="s2">&quot;</span> &gt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">out</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">}</span> encode<span class="o">()</span> <span class="o">{</span> openssl md5 -binary <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> &gt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">&amp;&amp;</span> cat <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp</span><span class="si">}</span><span class="s2">&quot;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> &gt; <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp2</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">&amp;&amp;</span> truncate -s %8 <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp2</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">&amp;&amp;</span> openssl enc -e -des-ecb -K <span class="s2">&quot;</span><span class="si">${</span><span class="nv">key</span><span class="si">}</span><span class="s2">&quot;</span> -nopad -in <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp2</span><span class="si">}</span><span class="s2">&quot;</span> -out <span class="s2">&quot;</span><span class="si">${</span><span class="nv">out</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">}</span> <span class="k">while</span> <span class="o">[</span> <span class="nv">$#</span> -gt <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">do</span> <span class="k">case</span> <span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span> in -i<span class="p">|</span>--input<span class="o">)</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;input file &#39;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&#39; is already set.&quot;</span> <span class="o">[</span> <span class="nv">$#</span> -gt <span class="m">1</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;option &#39;</span><span class="nv">$1</span><span class="s2">&#39; needs an argument.&quot;</span> <span class="nv">in</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$2</span><span class="s2">&quot;</span> <span class="nb">shift</span> 2 <span class="p">;;</span> -o<span class="p">|</span>--output<span class="o">)</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">out</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;output file &#39;</span><span class="si">${</span><span class="nv">out</span><span class="si">}</span><span class="s2">&#39; is already set.&quot;</span> <span class="o">[</span> <span class="nv">$#</span> -gt <span class="m">1</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;option &#39;</span><span class="nv">$1</span><span class="s2">&#39; needs an argument.&quot;</span> <span class="nv">out</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$2</span><span class="s2">&quot;</span> <span class="nb">shift</span> 2 <span class="p">;;</span> -d<span class="p">|</span>--decode<span class="o">)</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">mode</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;mode &#39;</span><span class="si">${</span><span class="nv">mode</span><span class="si">}</span><span class="s2">&#39; is already set.&quot;</span> <span class="nv">mode</span><span class="o">=</span><span class="s2">&quot;decode&quot;</span> <span class="nb">shift</span> 1 <span class="p">;;</span> -e<span class="p">|</span>--encode<span class="o">)</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">mode</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;mode &#39;</span><span class="si">${</span><span class="nv">mode</span><span class="si">}</span><span class="s2">&#39; is already set.&quot;</span> <span class="nv">mode</span><span class="o">=</span><span class="s2">&quot;encode&quot;</span> <span class="nb">shift</span> 1 <span class="p">;;</span> -h<span class="p">|</span>--help<span class="o">)</span> usage <span class="nb">exit</span> 0 <span class="p">;;</span> *<span class="o">)</span> <span class="k">if</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nv">in</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span> <span class="k">elif</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">out</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nv">out</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span> <span class="k">else</span> error <span class="s2">&quot;unexpected argument &#39;</span><span class="nv">$1</span><span class="s2">&#39;&quot;</span> <span class="k">fi</span> <span class="nb">shift</span> 1 <span class="p">;;</span> <span class="k">esac</span> <span class="k">done</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> error <span class="s2">&quot;no input file given.&quot;</span> <span class="o">[</span> -f <span class="s2">&quot;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">||</span> error <span class="s2">&quot;input file &#39;</span><span class="si">${</span><span class="nv">in</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">out</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> error <span class="s2">&quot;no output file given.&quot;</span> <span class="o">[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">mode</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nv">mode</span><span class="o">=</span><span class="s2">&quot;decode&quot;</span> <span class="nv">tmp</span><span class="o">=</span><span class="s2">&quot;</span><span class="k">$(</span>mktemp <span class="si">${</span><span class="nv">tmp_template</span><span class="si">}</span><span class="k">)</span><span class="s2">&quot;</span> <span class="nv">tmp2</span><span class="o">=</span><span class="s2">&quot;</span><span class="k">$(</span>mktemp <span class="si">${</span><span class="nv">tmp_template</span><span class="si">}</span><span class="k">)</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">mode</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s2">&quot;decode&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> decode <span class="k">else</span> encode <span class="k">fi</span> <span class="nv">result</span><span class="o">=</span><span class="nv">$?</span> rm <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp</span><span class="si">}</span><span class="s2">&quot;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">tmp2</span><span class="si">}</span><span class="s2">&quot;</span> <span class="nb">exit</span> <span class="si">${</span><span class="nv">result</span><span class="si">}</span> </pre></div> <p class="cut-end"></p> <p>Для восстановления входа на роутер нужно:</p> <ul class="simple"> <li>сохранить настройки перед обновлением прошивки;</li> <li>сбросить роутер до настроек по умолчанию (если оказалось, что после восстановления сохранённых настроек вход больше невозможен);</li> <li>изменить логин/пароль на желаемые и сохранить новый конфиг;</li> <li>декодировать оба конфига с помощью <tt class="docutils literal">tlrecode.sh config.bin config.txt &amp;&amp; tlrecode.sh <span class="pre">config-new.bin</span> <span class="pre">config-new.txt</span></tt>;</li> <li>исправить старый конфиг, заменив все строчки, начинающиеся с <tt class="docutils literal">lgn_</tt>, на их вариант из нового конфига;</li> <li>сконвертировать исправленный конфиг с помощью <tt class="docutils literal">tlrecode.sh <span class="pre">-e</span> config.txt <span class="pre">config-updated.bin</span></tt>;</li> <li>восстановить настройки роутера, загрузив <tt class="docutils literal"><span class="pre">config-updated.bin</span></tt>.</li> </ul> <p>После завершения процесса обновления, вход с использованием выбранных логина и пароля не должен вызвать проблем.</p> Nikita KarnauhovTue, 17 May 2016 00:00:00 +0600tag:,2016-05-17:ru/posts/2016/May/fixing-tp-link-login.htmllinuxtp-linkПанорама слияния Чуи и Катуни/ru/posts/2015/Oct/panorama-of-chuya-river-joining-katun.html<div><p>&#1071; &#1085;&#1072;&#1082;&#1086;&#1085;&#1077;&#1094;-&#1090;&#1086; &#1076;&#1086;&#1073;&#1088;&#1072;&#1083;&#1089;&#1103; &#1076;&#1086; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1092;&#1086;&#1090;&#1086;&#1075;&#1088;&#1072;&#1092;&#1080;&#1081;, &#1089;&#1082;&#1086;&#1087;&#1080;&#1074;&#1096;&#1080;&#1093;&#1089;&#1103; &#1079;&#1072; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1077; &#1075;&#1086;&#1076;&#1099;. &#1050;&#1072;&#1082; &#1086;&#1082;&#1072;&#1079;&#1072;&#1083;&#1086;&#1089;&#1100;, &#1080;&#1079; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1093; &#1080;&#1079; &#1085;&#1080;&#1093; &#1103; &#1089;&#1086;&#1073;&#1080;&#1088;&#1072;&#1083;&#1089;&#1103; &#1089;&#1082;&#1083;&#1077;&#1080;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1091;. &#1061;&#1086;&#1090;&#1103; &#1101;&#1090;&#1086;, &#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1084;, &#1073;&#1099;&#1083;&#1072; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1072;, &#1084;&#1086;&#1078;&#1085;&#1086; &#1083;&#1080; &#1089;&#1085;&#1103;&#1090;&#1100; &#1087;&#1072;&#1085;&#1086;&#1088;&#1072;&#1084;&#1091; &#1073;&#1077;&#1079; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1096;&#1090;&#1072;&#1090;&#1080;&#1074;&#1072;, &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090; &#1074;&#1099;&#1075;&#1083;&#1103;&#1076;&#1080;&#1090; &#1074;&#1087;&#1086;&#1083;&#1085;&#1077; &#1085;&#1077;&#1087;&#1083;&#1086;&#1093;&#1086;.</p> <div class="pic-wrapper compound"> <a href="/ru/albums/altai-2013/IMG_9324_9329.jpg"><img src="/ru/albums/altai-2013/600x600/IMG_9324_9329.jpg" alt=""></a><p></p></div> <p>&#1057;&#1082;&#1083;&#1077;&#1077;&#1085;&#1086; &#1080;&#1079; &#1096;&#1077;&#1089;&#1090;&#1080; (2 &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;, 3 &#1089;&#1090;&#1086;&#1083;&#1073;&#1094;&#1072;) &#1075;&#1086;&#1088;&#1080;&#1079;&#1086;&#1085;&#1090;&#1072;&#1083;&#1100;&#1085;&#1099;&#1093; &#1092;&#1086;&#1090;&#1086;&#1082; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; <a class="reference external" href="http://http://hugin.sourceforge.net/">Hugin</a>.</p> <p>&#1041;&#1086;&#1083;&#1100;&#1096;&#1077; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1086;&#1082; &#1080;&#1079; &#1090;&#1086;&#1081; &#1078;&#1077; &#1087;&#1086;&#1077;&#1079;&#1076;&#1082;&#1080; &#1087;&#1086; &#1089;&#1089;&#1099;&#1083;&#1082;&#1077; &#1085;&#1072; &#1072;&#1083;&#1100;&#1073;&#1086;&#1084; &#1087;&#1086;&#1076; &#1092;&#1086;&#1090;&#1086;&#1075;&#1088;&#1072;&#1092;&#1080;&#1077;&#1081;.</p> </div>Nikita KarnauhovTue, 13 Oct 2015 00:00:00 +0600tag:,2015-10-13:ru/posts/2015/Oct/panorama-of-chuya-river-joining-katun.htmlaltaiphotoКак я перешёл на XFCE/ru/posts/2015/Sep/switching-to-xfce.html<div><p>&#1052;&#1085;&#1077; &#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086; &#1086;&#1095;&#1077;&#1085;&#1100; &#1085;&#1088;&#1072;&#1074;&#1080;&#1090;&#1089;&#1103; &#1043;&#1085;&#1086;&#1084; 3 &#1079;&#1072; &#1074;&#1085;&#1077;&#1096;&#1085;&#1080;&#1081; &#1074;&#1080;&#1076; &#1080; &#1091;&#1076;&#1086;&#1073;&#1089;&#1090;&#1074;&#1086;. &#1053;&#1072; &#1089;&#1072;&#1084;&#1086;&#1084; &#1076;&#1077;&#1083;&#1077;, &#1103; &#1088;&#1072;&#1079;&#1085;&#1099;&#1084;&#1080; &#1074;&#1077;&#1088;&#1089;&#1080;&#1103;&#1084;&#1080; &#1043;&#1085;&#1086;&#1084;&#1072; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083;&#1089;&#1103;, &#1082;&#1072;&#1082; &#1084;&#1080;&#1085;&#1080;&#1084;&#1091;&#1084;, &#1089;&#1086; &#1074;&#1088;&#1077;&#1084;&#1105;&#1085; 1.2, &#1082;&#1086;&#1075;&#1076;&#1072; &#1077;&#1097;&#1105; &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1086;&#1082;&#1086;&#1085;&#1085;&#1086;&#1075;&#1086; &#1084;&#1077;&#1085;&#1077;&#1076;&#1078;&#1077;&#1088;&#1072; &#1089; &#1085;&#1080;&#1084; &#1096;&#1105;&#1083; Enlightenment. &#1054;&#1076;&#1085;&#1072;&#1082;&#1086;, &#1087;&#1086;&#1089;&#1083;&#1077; &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1077;&#1075;&#1086; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1076;&#1086; 22&#1086;&#1081; &#1060;&#1077;&#1076;&#1086;&#1088;&#1099;, &#1084;&#1085;&#1086;&#1075;&#1080;&#1077; &#1074;&#1077;&#1097;&#1080; &#1085;&#1072;&#1095;&#1072;&#1083;&#1080; &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1091;&#1078; &#1088;&#1072;&#1079;&#1076;&#1088;&#1072;&#1078;&#1072;&#1090;&#1100;. &#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1080;&#1085;&#1086;&#1075;&#1076;&#1072; &#1080;&#1084; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1090; &#1089;&#1098;&#1077;&#1076;&#1072;&#1090;&#1100;&#1089;&#1103; 100% &#1086;&#1076;&#1085;&#1086;&#1075;&#1086; &#1080;&#1079; &#1103;&#1076;&#1077;&#1088; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089;&#1089;&#1086;&#1088;&#1072;, &#1080;&#1085;&#1086;&#1075;&#1076;&#1072; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1103; &#1089;&#1072;&#1084;&#1086;&#1087;&#1088;&#1086;&#1080;&#1079;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1074;&#1099;&#1075;&#1088;&#1091;&#1078;&#1072;&#1102;&#1090;&#1089;&#1103;, &#1080; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1085;&#1099;&#1077; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1103; &#1090;&#1072;&#1082; &#1080; &#1085;&#1077; &#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1105;&#1085;&#1085;&#1099;&#1084;&#1080; &#1076;&#1086; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1081; &#1074;&#1077;&#1088;&#1089;&#1080;&#1080; &#1043;&#1085;&#1086;&#1084;&#1072;, &#1080; &#1076;&#1080;&#1089;&#1087;&#1083;&#1077;&#1081;&#1085;&#1099;&#1081; &#1084;&#1077;&#1085;&#1077;&#1076;&#1078;&#1077;&#1088; &#1079;&#1072;&#1095;&#1077;&#1084;-&#1090;&#1086; &#1087;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1085;&#1086; &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1077;&#1085;, &#1080; &#1090;.&#1076;. &#1069;&#1090;&#1086; &#1074;&#1089;&#1105; &#1089;&#1087;&#1086;&#1076;&#1074;&#1080;&#1075;&#1083;&#1086; &#1084;&#1077;&#1085;&#1103; &#1085;&#1072;&#1082;&#1086;&#1085;&#1077;&#1094;-&#1090;&#1086; &#1087;&#1077;&#1088;&#1077;&#1082;&#1083;&#1102;&#1095;&#1080;&#1090;&#1100;&#1089;&#1103; &#1085;&#1072; &#1085;&#1077;&#1095;&#1090;&#1086; &#1073;&#1086;&#1083;&#1077;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086;&#1077; &#1080; &#1083;&#1105;&#1075;&#1082;&#1086;&#1077;.</p> <p>&#1071; &#1080; &#1090;&#1072;&#1082; &#1091;&#1078;&#1077; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1083;&#1089;&#1103; <tt class="docutils literal"><span class="pre">xfce4-panel</span></tt> &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1089;&#1072;&#1081;&#1076;&#1073;&#1072;&#1088;&#1072; &#1087;&#1086;&#1076; &#1043;&#1085;&#1086;&#1084;&#1086;&#1084;, &#1090;&#1072;&#1082; &#1095;&#1090;&#1086; &#1087;&#1077;&#1088;&#1077;&#1081;&#1090;&#1080; &#1080;&#1084;&#1077;&#1085;&#1085;&#1086; &#1085;&#1072; XFCE &#1073;&#1099;&#1083;&#1086; &#1083;&#1086;&#1075;&#1080;&#1095;&#1085;&#1099;&#1084;. &#1047;&#1076;&#1077;&#1089;&#1100; &#1103; &#1087;&#1086;&#1089;&#1090;&#1072;&#1088;&#1072;&#1083;&#1089;&#1103; &#1074;&#1086;&#1089;&#1089;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1087;&#1088;&#1080;&#1074;&#1099;&#1095;&#1085;&#1086;&#1077; &#1086;&#1082;&#1088;&#1091;&#1078;&#1077;&#1085;&#1080;&#1077;, &#1089; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1085;&#1086; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1084; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1086;&#1084;:</p> <div class="pic-wrapper compound"> <a href="/ru/albums/switching-to-xfce/terminals.png"><img src="/ru/albums/switching-to-xfce/600x600/terminals.png" alt="top, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085;&#1085;&#1099;&#1081; &#1074; gnome-terminal, &#1080; Midnight Commander &#1089; &#1090;&#1077;&#1084;&#1086;&#1081; xoria256, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085;&#1085;&#1099;&#1081; &#1074; xterm"></a><p>top, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085;&#1085;&#1099;&#1081; &#1074; gnome-terminal, &#1080; Midnight Commander &#1089; &#1090;&#1077;&#1084;&#1086;&#1081; xoria256, &#1079;&#1072;&#1087;&#1091;&#1097;&#1077;&#1085;&#1085;&#1099;&#1081; &#1074; xterm</p></div> <p class="cut-begin" id="cut-4">&#1077;&#1097;&#1105; &#1087;&#1072;&#1088;&#1072; &#1089;&#1082;&#1088;&#1080;&#1085;&#1096;&#1086;&#1090;&#1086;&#1074; &#1080; &#1082;&#1091;&#1095;&#1082;&#1072; &#1087;&#1072;&#1090;&#1095;&#1077;&#1081;</p> <div class="pic-wrapper compound"> <a href="/ru/albums/switching-to-xfce/panel-plugins.png"><img src="/ru/albums/switching-to-xfce/600x600/panel-plugins.png" alt="&#1090;&#1077;&#1084;&#1072; GTK Ceti-2 &#1080; &#1089;&#1087;&#1080;&#1089;&#1086;&#1082; &#1072;&#1087;&#1087;&#1083;&#1077;&#1090;&#1086;&#1074; &#1089; &#1074;&#1077;&#1088;&#1093;&#1085;&#1077;&#1081; &#1087;&#1072;&#1085;&#1077;&#1083;&#1080;"></a><p>&#1090;&#1077;&#1084;&#1072; GTK Ceti-2 &#1080; &#1089;&#1087;&#1080;&#1089;&#1086;&#1082; &#1072;&#1087;&#1087;&#1083;&#1077;&#1090;&#1086;&#1074; &#1089; &#1074;&#1077;&#1088;&#1093;&#1085;&#1077;&#1081; &#1087;&#1072;&#1085;&#1077;&#1083;&#1080;</p></div> <p>&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103; &#1090;&#1077;&#1084;&#1072; <a class="reference external" href="http://horst3180.deviantart.com/art/Ceti-2-Theme-489193140">Ceti-2</a>, &#1089;&#1083;&#1077;&#1075;&#1082;&#1072; &#1087;&#1086;&#1076;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1089; &#1094;&#1077;&#1083;&#1100;&#1102; &#1091;&#1084;&#1077;&#1085;&#1100;&#1096;&#1077;&#1085;&#1080;&#1103; &#1086;&#1090;&#1089;&#1090;&#1091;&#1087;&#1086;&#1074; &#1074; &#1090;&#1072;&#1073;&#1072;&#1093; &#1080; &#1079;&#1072;&#1084;&#1077;&#1085;&#1099; &#1096;&#1088;&#1080;&#1092;&#1090;&#1072; &#1085;&#1072; &#1087;&#1072;&#1085;&#1077;&#1083;&#1103;&#1093;:</p> <div class="highlight"><pre><span></span><span class="gh">diff -u -r Ceti-2.orig/gtk-2.0/gtkrc Ceti-2/gtk-2.0/gtkrc</span> <span class="gd">--- Ceti-2.orig/gtk-2.0/gtkrc 2015-09-05 23:07:25.158255238 +0600</span> <span class="gi">+++ Ceti-2/gtk-2.0/gtkrc 2015-09-04 00:10:27.000000000 +0600</span> <span class="gu">@@ -16,7 +16,7 @@</span> GtkWidget::focus-line-width = 1 GtkMenuBar::window-dragging = 1 GtkToolbar::window-dragging = 1 <span class="gd">- GtkToolbar::internal-padding = 4</span> <span class="gi">+ GtkToolbar::internal-padding = 0</span> GtkToolButton::icon-spacing = 4 GtkWidget::tooltip-radius = 2 <span class="gh">diff -u -r Ceti-2.orig/gtk-2.0/panel.rc Ceti-2/gtk-2.0/panel.rc</span> <span class="gd">--- Ceti-2.orig/gtk-2.0/panel.rc 2015-09-05 23:05:12.411546816 +0600</span> <span class="gi">+++ Ceti-2/gtk-2.0/panel.rc 2015-08-31 22:41:08.000000000 +0600</span> <span class="gu">@@ -1,6 +1,9 @@</span> <span class="gi">+gtk-icon-sizes = "panel-tasklist-menu=64,64"</span> <span class="gi">+</span> style "theme-panel" { ythickness = 0 <span class="gi">+ font_name = "RobotoAC Bold 9"</span> bg[NORMAL] = "#2D3136" bg[ACTIVE] = shade(0.9, "#2D3136") <span class="gu">@@ -44,6 +47,8 @@</span> style "panelbuttons" { <span class="gi">+ font_name = "RobotoAC Bold Condensed 10"</span> <span class="gi">+</span> xthickness = 4 ythickness = 3 <span class="gu">@@ -55,6 +60,8 @@</span> gradient_shades = {1.0,0.9,0.9,0.8} border_shades = { 0.6, 0.6 } } <span class="gi">+</span> <span class="gi">+ XfceTasklist::max-button-size = 32</span> } style "theme-panel-text" { </pre></div> <p>&#1055;&#1086;&#1089;&#1083;&#1077; &#1087;&#1088;&#1080;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1074;&#1099;&#1096;&#1077;&#1087;&#1088;&#1080;&#1074;&#1077;&#1076;&#1105;&#1085;&#1085;&#1086;&#1075;&#1086; &#1092;&#1080;&#1082;&#1089;&#1072; <tt class="docutils literal"><span class="pre">internal-padding</span></tt>'&#1072;, &#1090;&#1091;&#1083;&#1073;&#1072;&#1088; &#1080; &#1090;&#1072;&#1073;&#1099; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;&#1072; &#1074; &#1069;&#1082;&#1083;&#1080;&#1087;&#1089;&#1077; &#1074;&#1099;&#1075;&#1083;&#1103;&#1076;&#1103;&#1090; &#1087;&#1086;&#1095;&#1090;&#1080; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086;:</p> <div class="pic-wrapper compound"> <a href="/ru/albums/switching-to-xfce/eclipse.png"><img src="/ru/albums/switching-to-xfce/600x600/eclipse.png" alt="&#1088;&#1072;&#1079;&#1074;&#1105;&#1088;&#1085;&#1091;&#1090;&#1086;&#1077; &#1080; &#1088;&#1072;&#1079;&#1076;&#1077;&#1082;&#1086;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1081; &#1086;&#1082;&#1085;&#1086; &#1069;&#1082;&#1083;&#1080;&#1087;&#1089;&#1072; &#1089; &#1090;&#1072;&#1073;&#1072;&#1084;&#1080; &#1087;&#1086;&#1095;&#1090;&#1080; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1072;"></a><p>&#1088;&#1072;&#1079;&#1074;&#1105;&#1088;&#1085;&#1091;&#1090;&#1086;&#1077; &#1080; &#1088;&#1072;&#1079;&#1076;&#1077;&#1082;&#1086;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1081; &#1086;&#1082;&#1085;&#1086; &#1069;&#1082;&#1083;&#1080;&#1087;&#1089;&#1072; &#1089; &#1090;&#1072;&#1073;&#1072;&#1084;&#1080; &#1087;&#1086;&#1095;&#1090;&#1080; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1072;</p></div> <p>&#1064;&#1088;&#1080;&#1092;&#1090; &#1085;&#1072; &#1087;&#1072;&#1085;&#1077;&#1083;&#1103;&#1093; &#1080; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1072;&#1093; &#1086;&#1082;&#1086;&#1085; &#8212; <a class="reference external" href="https://www.google.com/fonts/specimen/Roboto">Roboto</a> &#1086;&#1090; &#1043;&#1091;&#1075;&#1083;&#1072;, &#1074;&#1088;&#1091;&#1095;&#1085;&#1091;&#1102; (&#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; <tt class="docutils literal">fontforge</tt>) &#1089;&#1082;&#1086;&#1085;&#1074;&#1077;&#1088;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1081; &#1074; all-caps. &#1052;&#1086;&#1076;&#1080;&#1092;&#1080;&#1094;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1096;&#1088;&#1080;&#1092;&#1090;&#1099; &#1103; &#1074;&#1099;&#1083;&#1086;&#1078;&#1080;&#1083; <a class="reference external" href="http://0x20.ru:8000/d/1863500a74/">&#1089;&#1102;&#1076;&#1072;</a>.</p> <p>&#1050;&#1088;&#1086;&#1084;&#1077; &#1090;&#1086;&#1075;&#1086;, &#1076;&#1083;&#1103; &#1091;&#1083;&#1091;&#1095;&#1096;&#1077;&#1085;&#1080;&#1103; &#1074;&#1085;&#1077;&#1096;&#1085;&#1077;&#1075;&#1086; &#1074;&#1080;&#1076;&#1072;, &#1087;&#1088;&#1080;&#1096;&#1083;&#1086;&#1089;&#1100; &#1087;&#1086;&#1076;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1100; &#1082;&#1086;&#1076; &#1072;&#1087;&#1087;&#1083;&#1077;&#1090;&#1086;&#1074;: &#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1083; &#1086;&#1090;&#1089;&#1090;&#1091;&#1087;&#1099; &#1084;&#1086;&#1085;&#1080;&#1090;&#1086;&#1088;&#1086;&#1074; &#1087;&#1088;&#1086;&#1080;&#1079;&#1074;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1080;, &#1080;&#1079;&#1084;&#1077;&#1085;&#1080;&#1083; &#1096;&#1088;&#1080;&#1092;&#1090;&#1099; &#1080; &#1094;&#1074;&#1077;&#1090;&#1072; &#1082;&#1083;&#1072;&#1074;&#1080;&#1072;&#1090;&#1091;&#1088;&#1085;&#1099;&#1093; &#1080;&#1085;&#1076;&#1080;&#1082;&#1072;&#1090;&#1086;&#1088;&#1086;&#1074;, &#1089;&#1076;&#1077;&#1083;&#1072;&#1083; &#1080;&#1082;&#1086;&#1085;&#1082;&#1091; &#1075;&#1088;&#1086;&#1084;&#1082;&#1086;&#1089;&#1090;&#1080; &#1073;&#1077;&#1083;&#1086;&#1081; &#1074;&#1084;&#1077;&#1089;&#1090;&#1086; &#1090;&#1105;&#1084;&#1085;&#1086;-&#1089;&#1077;&#1088;&#1086;&#1081;. &#1044;&#1086; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1080;&#1079; &#1101;&#1090;&#1080;&#1093; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1077;&#1082;, &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;, &#1084;&#1086;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1076;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100;&#1089;&#1103; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1090;&#1077;&#1084;&#1099;, &#1085;&#1086; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1079;&#1072;&#1093;&#1072;&#1088;&#1076;&#1082;&#1086;&#1078;&#1077;&#1085;&#1099;, &#1090;&#1072;&#1082; &#1095;&#1090;&#1086; &#1087;&#1072;&#1090;&#1095;&#1080;&#1090;&#1100; &#1074;&#1089;&#1105; &#1088;&#1072;&#1074;&#1085;&#1086; &#1073;&#1099; &#1087;&#1088;&#1080;&#1096;&#1083;&#1086;&#1089;&#1100;. &#1071; &#1073;&#1072;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086; &#1079;&#1072;&#1084;&#1077;&#1085;&#1080;&#1083; &#1086;&#1076;&#1085;&#1080; &#1079;&#1072;&#1093;&#1072;&#1088;&#1076;&#1082;&#1086;&#1078;&#1077;&#1085;&#1085;&#1099;&#1077; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103; &#1085;&#1072; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077;, &#1090;&#1072;&#1082; &#1095;&#1090;&#1086; &#1082;&#1086;&#1076; &#1074;&#1089;&#1105; &#1088;&#1072;&#1074;&#1085;&#1086; &#1089;&#1090;&#1088;&#1072;&#1096;&#1077;&#1085;, &#1085;&#1086;, &#1093;&#1086;&#1090;&#1103; &#1073;&#1099;, &#1072;&#1087;&#1087;&#1083;&#1077;&#1090;&#1099; &#1090;&#1077;&#1087;&#1077;&#1088;&#1100; &#1074;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1074; &#1086;&#1073;&#1097;&#1091;&#1102; &#1090;&#1077;&#1084;&#1091; &#1074;&#1080;&#1079;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086;:</p> <div class="highlight"><pre><span></span><span class="gh">diff -u -r xfce4-kbdleds-plugin-0.0.6.orig/panel-plugin/kbdleds.c xfce4-kbdleds-plugin-0.0.6/panel-plugin/kbdleds.c</span> <span class="gd">--- xfce4-kbdleds-plugin-0.0.6.orig/panel-plugin/kbdleds.c 2011-10-13 22:51:23.000000000 +0700</span> <span class="gi">+++ xfce4-kbdleds-plugin-0.0.6/panel-plugin/kbdleds.c 2015-09-01 00:07:03.000966168 +0600</span> <span class="gu">@@ -220,7 +220,7 @@</span> gboolean kbdleds_update_state(gpointer data) { int i; gchar *str; <span class="gd">- gchar *template_on="&lt;span background=\"#00ff00\" foreground=\"#000000\"&gt;%c&lt;/span&gt;";</span> <span class="gi">+ gchar *template_on="&lt;span background=\"#ffffff\" foreground=\"#000000\"&gt;%c&lt;/span&gt;";</span> gchar *template_off="%c"; gchar *tempstr[NUM_LEDS]; gchar *templates[NUM_LEDS]; </pre></div> <div class="highlight"><pre><span></span><span class="gh">diff -u -r xfce4-pulseaudio-plugin-0.2.3.orig/panel-plugin/pulseaudio-button.c xfce4-pulseaudio-plugin-0.2.3/panel-plugin/pulseaudio-button.c</span> <span class="gd">--- xfce4-pulseaudio-plugin-0.2.3.orig/panel-plugin/pulseaudio-button.c 2015-05-04 02:52:14.000000000 +0600</span> <span class="gi">+++ xfce4-pulseaudio-plugin-0.2.3/panel-plugin/pulseaudio-button.c 2015-09-01 20:18:10.908803274 +0600</span> <span class="gu">@@ -137,7 +137,7 @@</span> /* Setup Gtk style */ css_provider = gtk_css_provider_new (); <span class="gd">- gtk_css_provider_load_from_data (css_provider, "#pulseaudio-button { -GtkWidget-focus-padding: 0; -GtkWidget-focus-line-width: 0; -GtkButton-default-border: 0; -GtkButton-inner-border: 0; padding: 1px; border-width: 1px;}", -1, NULL);</span> <span class="gi">+ gtk_css_provider_load_from_data (css_provider, "#pulseaudio-button { -GtkWidget-focus-padding: 0; -GtkWidget-focus-line-width: 0; -GtkButton-default-border: 0; -GtkButton-inner-border: 0; padding: 1px; border-width: 1px; color: #ffffff; }", -1, NULL);</span> gtk_style_context_add_provider (GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (button))), GTK_STYLE_PROVIDER (css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); /* Intercept scroll events */ </pre></div> <div class="highlight"><pre><span></span><span class="gh">diff -u -r xfce4-xkb-plugin-0.7.1.orig/panel-plugin/xkb-cairo.c xfce4-xkb-plugin-0.7.1/panel-plugin/xkb-cairo.c</span> <span class="gd">--- xfce4-xkb-plugin-0.7.1.orig/panel-plugin/xkb-cairo.c 2015-02-28 03:53:11.000000000 +0600</span> <span class="gi">+++ xfce4-xkb-plugin-0.7.1/panel-plugin/xkb-cairo.c 2015-09-01 21:20:52.883016118 +0600</span> <span class="gu">@@ -31,7 +31,7 @@</span> #include &lt;librsvg/rsvg-cairo.h&gt; #endif <span class="gd">-#define XKB_PREFERRED_FONT "Courier New, Courier 10 Pitch, Monospace Bold"</span> <span class="gi">+#define XKB_PREFERRED_FONT "RobotoAC Bold 9"</span> #define xkb_cairo_arc_for_flag(cr, x, y, r, a1, a2) \ xx = layoutx + width - 12 + x; \ </pre></div> <p>&#1055;&#1072;&#1085;&#1077;&#1083;&#1100; <tt class="docutils literal"><span class="pre">xfce4-panel</span></tt> &#1090;&#1072;&#1082;&#1078;&#1077; &#1073;&#1099;&#1083;&#1072; &#1087;&#1088;&#1086;&#1087;&#1072;&#1090;&#1095;&#1077;&#1085;&#1072;, &#1095;&#1090;&#1086;&#1073;&#1099; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1080;&#1090;&#1100; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1096;&#1080;&#1088;&#1086;&#1082;&#1080;&#1081; &#1089;&#1072;&#1081;&#1076;&#1073;&#1072;&#1088; &#1080; &#1073;&#1086;&#1083;&#1077;&#1077; &#1082;&#1088;&#1091;&#1087;&#1085;&#1099;&#1077; &#1080;&#1082;&#1086;&#1085;&#1082;&#1080; &#1074; &#1089;&#1087;&#1080;&#1089;&#1082;&#1077; &#1079;&#1072;&#1076;&#1072;&#1095;:</p> <div class="highlight"><pre><span></span><span class="gh">diff -u -r xfce4-panel-4.12.0.orig/panel/panel-itembar.c xfce4-panel-4.12.0/panel/panel-itembar.c</span> <span class="gd">--- xfce4-panel-4.12.0.orig/panel/panel-itembar.c 2014-04-25 03:16:37.000000000 +0700</span> <span class="gi">+++ xfce4-panel-4.12.0/panel/panel-itembar.c 2015-08-23 17:19:45.000000000 +0600</span> <span class="gu">@@ -193,7 +193,7 @@</span> PROP_SIZE, g_param_spec_uint ("size", NULL, NULL, <span class="gd">- 16, 128, 30,</span> <span class="gi">+ 16, 256, 30,</span> EXO_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, <span class="gh">diff -u -r xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog.glade xfce4-panel-4.12.0/panel/panel-preferences-dialog.glade</span> <span class="gd">--- xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog.glade 2015-02-27 02:32:17.000000000 +0600</span> <span class="gi">+++ xfce4-panel-4.12.0/panel/panel-preferences-dialog.glade 2015-08-23 16:21:07.000000000 +0600</span> <span class="gu">@@ -73,7 +73,7 @@</span> &lt;object class="GtkAdjustment" id="size"&gt; &lt;property name="value"&gt;16&lt;/property&gt; &lt;property name="lower"&gt;16&lt;/property&gt; <span class="gd">- &lt;property name="upper"&gt;128&lt;/property&gt;</span> <span class="gi">+ &lt;property name="upper"&gt;256&lt;/property&gt;</span> &lt;property name="step_increment"&gt;1&lt;/property&gt; &lt;property name="page_increment"&gt;10&lt;/property&gt; &lt;/object&gt; <span class="gh">diff -u -r xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog-ui.h xfce4-panel-4.12.0/panel/panel-preferences-dialog-ui.h</span> <span class="gd">--- xfce4-panel-4.12.0.orig/panel/panel-preferences-dialog-ui.h 2015-02-28 22:22:40.000000000 +0600</span> <span class="gi">+++ xfce4-panel-4.12.0/panel/panel-preferences-dialog-ui.h 2015-08-23 16:21:22.000000000 +0600</span> <span class="gu">@@ -28,7 +28,7 @@</span> "id=\"0\" translatable=\"yes\"&gt;Background image&lt;/col&gt;&lt;/row&gt;&lt;/data&gt;&lt;/obje" "ct&gt;&lt;object class=\"GtkAdjustment\" id=\"size\"&gt;&lt;property name=\"value\"" "&gt;16&lt;/property&gt;&lt;property name=\"lower\"&gt;16&lt;/property&gt;&lt;property name=\"up" <span class="gd">- "per\"&gt;128&lt;/property&gt;&lt;property name=\"step_increment\"&gt;1&lt;/property&gt;&lt;prop"</span> <span class="gi">+ "per\"&gt;256&lt;/property&gt;&lt;property name=\"step_increment\"&gt;1&lt;/property&gt;&lt;prop"</span> "erty name=\"page_increment\"&gt;10&lt;/property&gt;&lt;/object&gt;&lt;object class=\"GtkA" "djustment\" id=\"length\"&gt;&lt;property name=\"value\"&gt;25&lt;/property&gt;&lt;proper" "ty name=\"lower\"&gt;1&lt;/property&gt;&lt;property name=\"upper\"&gt;100&lt;/property&gt;&lt;p" <span class="gh">diff -u -r xfce4-panel-4.12.0.orig/panel/panel-window.c xfce4-panel-4.12.0/panel/panel-window.c</span> <span class="gd">--- xfce4-panel-4.12.0.orig/panel/panel-window.c 2015-02-28 20:52:27.000000000 +0600</span> <span class="gi">+++ xfce4-panel-4.12.0/panel/panel-window.c 2015-08-23 17:19:38.000000000 +0600</span> <span class="gu">@@ -392,7 +392,7 @@</span> g_object_class_install_property (gobject_class, PROP_SIZE, g_param_spec_uint ("size", NULL, NULL, <span class="gd">- 16, 128, 48,</span> <span class="gi">+ 16, 256, 48,</span> EXO_PARAM_READWRITE)); g_object_class_install_property (gobject_class, <span class="gh">diff -u -r xfce4-panel-4.12.0.orig/plugins/tasklist/tasklist-widget.c xfce4-panel-4.12.0/plugins/tasklist/tasklist-widget.c</span> <span class="gd">--- xfce4-panel-4.12.0.orig/plugins/tasklist/tasklist-widget.c 2015-02-27 02:32:17.000000000 +0600</span> <span class="gi">+++ xfce4-panel-4.12.0/plugins/tasklist/tasklist-widget.c 2015-09-05 22:35:33.794372013 +0600</span> <span class="gu">@@ -46,7 +46,7 @@</span> #define DEFAULT_BUTTON_SIZE (25) #define DEFAULT_MAX_BUTTON_LENGTH (200) <span class="gd">-#define DEFAULT_MENU_ICON_SIZE (16)</span> <span class="gi">+#define DEFAULT_MENU_ICON_SIZE (32)</span> #define DEFAULT_MIN_BUTTON_LENGTH (DEFAULT_MAX_BUTTON_LENGTH / 4) #define DEFAULT_ICON_LUCENCY (50) #define DEFAULT_ELLIPSIZE_MODE (PANGO_ELLIPSIZE_END) <span class="gu">@@ -2449,7 +2449,7 @@</span> return; /* get the window icon */ <span class="gd">- if (tasklist-&gt;show_labels)</span> <span class="gi">+ if (0 &amp;&amp; tasklist-&gt;show_labels)</span> pixbuf = wnck_window_get_mini_icon (window); else pixbuf = wnck_window_get_icon (window); <span class="gu">@@ -3495,7 +3495,7 @@</span> return; /* get the class group icon */ <span class="gd">- if (group_child-&gt;tasklist-&gt;show_labels)</span> <span class="gi">+ if (0 &amp;&amp; group_child-&gt;tasklist-&gt;show_labels)</span> pixbuf = wnck_class_group_get_mini_icon (class_group); else pixbuf = wnck_class_group_get_icon (class_group); </pre></div> <p class="cut-end"></p> <p>&#1042; &#1086;&#1073;&#1097;&#1077;&#1084;, &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1086;&#1084; &#1103; &#1074;&#1087;&#1086;&#1083;&#1085;&#1077; &#1076;&#1086;&#1074;&#1086;&#1083;&#1077;&#1085;. &#1042;&#1086;&#1090;, &#1076;&#1083;&#1103; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1103;, &#1089;&#1082;&#1088;&#1080;&#1085;&#1096;&#1086;&#1090; <em>&#1076;&#1086;</em>, &#1089; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1090;&#1088;&#1077;&#1090;&#1100;&#1077;&#1075;&#1086; &#1043;&#1085;&#1086;&#1084;&#1072;:</p> <div class="pic-wrapper compound"> <a href="/ru/albums/switching-to-xfce/gnome-shell.png"><img src="/ru/albums/switching-to-xfce/600x600/gnome-shell.png" alt="&#1043;&#1085;&#1086;&#1084; &#1089; &#1072;&#1085;&#1072;&#1083;&#1086;&#1075;&#1080;&#1095;&#1085;&#1099;&#1084;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072;&#1084;&#1080;"></a><p>&#1043;&#1085;&#1086;&#1084; &#1089; &#1072;&#1085;&#1072;&#1083;&#1086;&#1075;&#1080;&#1095;&#1085;&#1099;&#1084;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072;&#1084;&#1080;</p></div> <p>&#1056;&#1072;&#1079;&#1085;&#1080;&#1094;&#1072; &#1087;&#1086; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1102; &#1089;&#1086; &#1089;&#1082;&#1088;&#1080;&#1085;&#1096;&#1086;&#1090;&#1072;&#1084;&#1080; <em>&#1087;&#1086;&#1089;&#1083;&#1077;</em> &#1085;&#1077; &#1090;&#1072;&#1082; &#1074;&#1077;&#1083;&#1080;&#1082;&#1072;, &#1085;&#1086; &#1074; &#1101;&#1090;&#1086;&#1084; &#1080; &#1073;&#1099;&#1083;&#1072; &#1074;&#1089;&#1103; &#1079;&#1072;&#1076;&#1091;&#1084;&#1082;&#1072;.</p> </div>Nikita KarnauhovSat, 05 Sep 2015 00:00:00 +0600tag:,2015-09-05:ru/posts/2015/Sep/switching-to-xfce.htmllinuxgnomexfcescreenshots