<?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>Bappoy&#039;s blog &#187; konsole</title>
	<atom:link href="http://bappoy.pp.ru/tag/konsole/feed" rel="self" type="application/rss+xml" />
	<link>http://bappoy.pp.ru</link>
	<description>Линуксоид на велосипеде с моторчиком</description>
	<lastBuildDate>Mon, 06 Sep 2010 14:00:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Изменение цвета фона konsole при выполнении команды sudo</title>
		<link>http://bappoy.pp.ru/2007/11/26/konsole-sudo.html</link>
		<comments>http://bappoy.pp.ru/2007/11/26/konsole-sudo.html#comments</comments>
		<pubDate>Mon, 26 Nov 2007 15:33:16 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[lifehack]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[konsole]]></category>
		<category><![CDATA[советы]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/2007/11/26/konsole-sudo/</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fbappoy.pp.ru%2F2007%2F11%2F26%2Fkonsole-sudo.html"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fbappoy.pp.ru%2F2007%2F11%2F26%2Fkonsole-sudo.html" height="61" width="51" /></a></div><p>В продолжение темы <a href="http://bappoy.pp.ru/2007/11/21/konsole-encodings/">konsole + dcop</a>.</p>
<p>В konsole есть механизм сохранения сессий (или сеансов, кому как нравится). Сразу после установки имеется несколько предопределённых сеансов: shell, midnight commander, root shell, root midnight commander. Они отличаются друг от друга, во-первых, командой, выполняющейся при запуске (sudo -s, mc или sudo mc), во-вторых, жёлтым цветом фона рутовой консоли &#8212; чтобы root не зевал и не написал случайно что-нибудь деструктивное.</p>
<p>Изменение цвета фона рутовой консоли &#8212; хорошая идея, однако переключаться в рутовую консоль путём вызова соответствующего сеанса (пусть даже с помощью горячих клавиш) не всегда удобно. Гораздо чаще используется команда sudo. Было бы неплохо менять цвет консоли и при её вызове.</p>
<p>С помощью dcop реализовать это очень просто:</p>
<blockquote><p><code>#!/bin/bash<br />
test -z "$KONSOLE_DCOP_SESSION" || dcop $KONSOLE_DCOP_SESSION setSchema BlackOnLightYellow.schema<br />
sudo $*<br />
test -z "$KONSOLE_DCOP_SESSION" || dcop $KONSOLE_DCOP_SESSION setSchema LightPicture.schema</code></p></blockquote>
<p>Вместо LightPicture.schema нужно написать свою любимую схему konsole. Скрипт можно сохранить под любым названием (например, sudo.sh) в каталог ~/bin, а в .bashrc назначить alias для sudo:</p>
<blockquote><p><code>alias sudo='~/bin/sudo.sh $*'</code></p></blockquote>
<p>Теперь при запуске sudo с любыми параметрами (sudo -s, sudo whoami и т.д.) консоль будет менять цвет фона на жёлтый на время выполнения.</p>
<p>P.S. поздновато я DCOP&#8217;ом начал проникаться &#8212; в KDE4 его заменит D-BUS.</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2007/11/26/konsole-sudo.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Автоматическое изменение кодировки в konsole</title>
		<link>http://bappoy.pp.ru/2007/11/21/konsole-encodings.html</link>
		<comments>http://bappoy.pp.ru/2007/11/21/konsole-encodings.html#comments</comments>
		<pubDate>Tue, 20 Nov 2007 21:49:35 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[lifehack]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Ссылки]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[konsole]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[советы]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/2007/11/21/konsole-encodings/</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fbappoy.pp.ru%2F2007%2F11%2F21%2Fkonsole-encodings.html"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fbappoy.pp.ru%2F2007%2F11%2F21%2Fkonsole-encodings.html" height="61" width="51" /></a></div><p>У нас в организации есть несколько серверов со старыми линуксами, которые используют кодировку KOI8-R. С того момента, как я поставил на свой рабочий компьютер Федору, меня очень раздражала необходимость вручную переключать кодировку для каждого сеанса в konsole. Сегодня под впечатлением от <a href="http://j-sheridan.livejournal.com/11522.html">заметки про установку away в ICQ в зависимости от достижимости телефона по bluetooth</a> наконец придумал, как это сделать.</p>
<p>Как и всякая программа KDE, konsole использует <a href="http://en.wikipedia.org/wiki/Dcop" title="Wikipedia: DCOP">DCOP</a> для внутрисистемных коммуникаций. Это означает, что запущенной программой можно управлять из командной строки командами типа &laquo;<code>dcop konsole-2115 konsole setFullScreen true</code>&laquo;. Здесь <code>konsole-2115</code> &#8212; название программы + её pid, все остальные аргументы &#8212; это, говоря языком ООП, объект, методы и параметры. Список программ, которыми можно рулить подобным образом, и их объектов с методами можно получить, выполняя последовательно команды dcop, dcop konsole-2115, dcop konsole-2115 konsole и т.д.</p>
<p>Вернёмся к нашим баранам. Konsole при запуске устанавливает две переменные окружения: KONSOLE_DCOP, в которой хранится ссылка на текущий экземпляр программы, и KONSOLE_DCOP_SESSION &#8212; ссылка на текущий сеанс. Для установки кодировки текущего сеанса нужно использовать такую команду:</p>
<blockquote><p><code>dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R</code></p></blockquote>
<p>Собственно, на этом задачу можно считать решённой, осталось правильно оформить ответ :)</p>
<p>В качестве быстрого решения подойдёт прописывание в .bashrc alias&#8217;ов для всех интересующих хостов:</p>
<blockquote><p><code>alias 01='dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R;ssh bpp@192.168.0.1 $*;dcop $KONSOLE_DCOP_SESSION setEncoding UTF8;'<br />
alias 02='dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R;ssh bpp@192.168.0.2 $*;dcop $KONSOLE_DCOP_SESSION setEncoding UTF8;'<br />
alias 03='dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R;ssh bpp@192.168.0.3 $*;dcop $KONSOLE_DCOP_SESSION setEncoding UTF8;'</code></p></blockquote>
<p>Более правильное решение &#8212; оформить это в виде небольшого скрипта ~/bin/ssh-launcher.sh, который умеет переименовывать сеанс и проверять, выполняется ли команда в konsole, а не, например, в xterme, который dcop не поддерживает. Кроме того, скрипт можно расширять, добавляя установку различных параметров konsole в зависимости от хоста назначения.</p>
<blockquote><p><code><br />
#!/bin/bash<br />
if !([[ "$1" ]] &amp;&amp; [[ "$2" ]]) ; then</code></p>
<blockquote><p>echo Usage: $0 username hostname \[ ssh parameters \]<br />
exit 1</p></blockquote>
<p>fi</p>
<p>ssh_params=( $* )<br />
ssh_user=${ssh_params[0]}<br />
ssh_host=${ssh_params[1]}<br />
unset ssh_params[0]<br />
unset ssh_params[1]<br />
ssh_parameters=${ssh_params[*]}</p>
<p>if [[ x"$KONSOLE_DCOP" != "x" ]] ; then # если мы в konsole</p>
<blockquote><p>dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R<br />
dcop $KONSOLE_DCOP_SESSION renameSession $ssh_user@$ssh_host<br />
ssh $ssh_user@$ssh_host $ssh_parameters<br />
dcop $KONSOLE_DCOP_SESSION renameSession `whoami`@`hostname`<br />
dcop $KONSOLE_DCOP_SESSION setEncoding UTF8</p></blockquote>
<p>else</p>
<blockquote><p>kdialog &#8211;text &laquo;run this from konsole&raquo;</p></blockquote>
<p>fi</p></blockquote>
<p>Теперь в ~/.bashrc можно прописать alias&#8217;ы длы вызова этого скрипта:</p>
<blockquote><p><code><br />
alias 01='ssh-launcher bpp 192.168.0.1 $*'<br />
alias 02='ssh-launcher bpp 192.168.0.1 $*'<br />
alias 03='ssh-launcher bpp 192.168.0.1 $*'<br />
...<br />
alias bpp='ssh-launcher bappoy bappoy.pp.ru $*'<br />
</code></p></blockquote>
<p>P.S. Обратите внимание на <code>$*</code> в конце alias&#8217;а &#8212; благодаря этой переменной можно очень быстро выполнять команды на указанном сервере:</p>
<blockquote><p><code>01 ps -ax\|grep httpd\|wc -l</code></p></blockquote>
<p><strong>Ссылки про DCOP</strong><br />
<a href="http://docs.kde.org/userguide/kde-diy.html">KDE DIY &#8211; Building Your Own Tools</a><br />
<a href="http://linuxgazette.mirrors.org.ua/issue97/oregan2.html">Using DCOP from the command line</a> (Linux Gazette #97)<br />
<a href="http://en.wikipedia.org/wiki/Dcop">DCOP @Wikipedia</a></p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2007/11/21/konsole-encodings.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
