Автоматическая смена кодировки в konsole |
[исправить] |
Скрипт, использующий dcop для упрощения процесса смены кодировки в konsole при подключении к ssh.
Как и всякая программа 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
http://docs.kde.org/userguide/kde-diy.html
Using DCOP from the command line (Linux Gazette #97)
http://linuxgazette.mirrors.org.ua/issue97/oregan2.html
DCOP @Wikipedia
http://en.wikipedia.org/wiki/Dcop
|
|
|
|
Раздел: Корень / Пользователю / Русификация |
1, bappoy (ok), 19:16, 21/11/2007 [ответить]
| +/– |
в алиасах имя пользователя надо прописывать без собаки:
alias 01='ssh-launcher bpp 192.168.0.1 $*'
| |
2, Serg11 (??), 12:21, 23/11/2007 [ответить]
| +/– |
еще полезно что-то вроде
dcop $KONSOLE_DCOP_SESSION setSchema BlackOnLightYellow.schema
добавить. Если запустить ssh на сервере под рутом, удобно, когда другой цвет, да и привычка уже...
Ну, это на вкус.
| |
|
3, bappoy (ok), 12:06, 26/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
это отдельный скрипт надо делать, в одну строчку не получится:
#!/bin/bash
dcop $KONSOLE_DCOP_SESSION setSchema BlackOnLightYellow.schema
sudo $*
dcop $KONSOLE_DCOP_SESSION setSchema LightPicture.schema # схема по умолчанию
| |
|
4, Antrew (??), 02:50, 29/11/2007 [ответить]
| +/– |
Спасибо тебе, добрый человек! Теперь не надо кодировку каждый раз через меню выбирать. Я сделал еще проще, у меня настроены сеансы для каждого хоста вот такой командой:
dcop $KONSOLE_DCOP_SESSION setEncoding utf8; ssh someone@somewhere.com
| |
|