[ Content | View menu ]

Автоматическое изменение кодировки в konsole

Опубликовано 21.11.2007

У нас в организации есть несколько серверов со старыми линуксами, которые используют кодировку KOI8-R. С того момента, как я поставил на свой рабочий компьютер Федору, меня очень раздражала необходимость вручную переключать кодировку для каждого сеанса в konsole. Сегодня под впечатлением от заметки про установку away в ICQ в зависимости от достижимости телефона по bluetooth наконец придумал, как это сделать.

Как и всякая программа KDE, konsole использует DCOP для внутрисистемных коммуникаций. Это означает, что запущенной программой можно управлять из командной строки командами типа “dcop konsole-2115 konsole setFullScreen true“. Здесь konsole-2115 — название программы + её pid, все остальные аргументы — это, говоря языком ООП, объект, методы и параметры. Список программ, которыми можно рулить подобным образом, и их объектов с методами можно получить, выполняя последовательно команды dcop, dcop konsole-2115, dcop konsole-2115 konsole и т.д.

Вернёмся к нашим баранам. Konsole при запуске устанавливает две переменные окружения: KONSOLE_DCOP, в которой хранится ссылка на текущий экземпляр программы, и KONSOLE_DCOP_SESSION — ссылка на текущий сеанс. Для установки кодировки текущего сеанса нужно использовать такую команду:

dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R

Собственно, на этом задачу можно считать решённой, осталось правильно оформить ответ :)

В качестве быстрого решения подойдёт прописывание в .bashrc alias’ов для всех интересующих хостов:

alias 01='dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R;ssh bpp@192.168.0.1 $*;dcop $KONSOLE_DCOP_SESSION setEncoding UTF8;'
alias 02='dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R;ssh bpp@192.168.0.2 $*;dcop $KONSOLE_DCOP_SESSION setEncoding UTF8;'
alias 03='dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R;ssh bpp@192.168.0.3 $*;dcop $KONSOLE_DCOP_SESSION setEncoding UTF8;'

Более правильное решение — оформить это в виде небольшого скрипта ~/bin/ssh-launcher.sh, который умеет переименовывать сеанс и проверять, выполняется ли команда в konsole, а не, например, в xterme, который dcop не поддерживает. Кроме того, скрипт можно расширять, добавляя установку различных параметров konsole в зависимости от хоста назначения.


#!/bin/bash
if !([[ "$1" ]] && [[ "$2" ]]) ; then

echo Usage: $0 username hostname \[ ssh parameters \]
exit 1

fi

ssh_params=( $* )
ssh_user=${ssh_params[0]}
ssh_host=${ssh_params[1]}
unset ssh_params[0]
unset ssh_params[1]
ssh_parameters=${ssh_params[*]}

if [[ x"$KONSOLE_DCOP" != "x" ]] ; then # если мы в konsole

dcop $KONSOLE_DCOP_SESSION setEncoding KOI8-R
dcop $KONSOLE_DCOP_SESSION renameSession $ssh_user@$ssh_host
ssh $ssh_user@$ssh_host $ssh_parameters
dcop $KONSOLE_DCOP_SESSION renameSession `whoami`@`hostname`
dcop $KONSOLE_DCOP_SESSION setEncoding UTF8

else

kdialog –text “run this from konsole”

fi

Теперь в ~/.bashrc можно прописать alias’ы длы вызова этого скрипта:


alias 01='ssh-launcher bpp 192.168.0.1 $*'
alias 02='ssh-launcher bpp 192.168.0.1 $*'
alias 03='ssh-launcher bpp 192.168.0.1 $*'
...
alias bpp='ssh-launcher bappoy bappoy.pp.ru $*'

P.S. Обратите внимание на $* в конце alias’а — благодаря этой переменной можно очень быстро выполнять команды на указанном сервере:

01 ps -ax\|grep httpd\|wc -l

Ссылки про DCOP
KDE DIY – Building Your Own Tools
Using DCOP from the command line (Linux Gazette #97)
DCOP @Wikipedia

«
»

1 комментарий

Write a comment - TrackBack - RSS Comments

  1. Pingback from Изменение цвета фона konsole при выполнении команды sudo | Bappoy’s blog:

    [...] В продолжение темы konsole + dcop. [...]

    26.11.2007 @ 19:33
Write comment

Я не робот.