среда, 31 марта 2010 г.

Ruby FTP, копирование файла на FTP

Источник: http://www.ruby.inuse.ru/blog/spine/ruby-ftp-kopirovanie-faila-na-ftp
Понадобилось из Руби скрипта положить файл на FTP Server, вот как я это оформил:

require 'net/ftp'


# Устанавливаес соединение с FTP сервером
session = Net::FTP.new( ftp_server, ftp_login, ftp_password )

# Указываем, что файлы надо воспринимать как бинарные
session.binary = true

# Переводим клиента в пассивный режим
session.passive = true

# Перемещаемся в заданный каталог на FTP сервере
files = session.chdir( 'ruby ftp example' )

# Отправляем файл на сервер
session.putbinaryfile('file_name')

# Закрываем соединение
session.close


Возможно кому-то пригодится. net/ftp это стандартный модуль, дополнительных библиотек не требуется.

Создание и удаление папок в Ruby

Для создания вложенных папок используем

require "fileutils"
FileUtils::mkdir_p "a/b/c"



Ранее опубликованное решение:

Источник: http://blog.inst.pp.ru/coding/creation_and_removing_dirs_in_ruby
Удаление (пробовал только в Windows)
    require 'fileutils'
    FileUtils.remove_dir('C:\FTP_Omega', force=true)


Когда встал вопрос о создании новой папки быстренько нашёл в документации к классу Dir метод mkdir, впрочем, мне это не очень помогло. Задача стояла создать директорию, но вот об уровне вложенности метод mkdir не заботится, — например, если по адресу «/home/inst/examples/newdir» не будет существовать папки «examples», то метод возвратит ошибку. Мне же требовалось создать и все вышележащие папки в случае их отсутствия. Очень повезло с тем, что нашёл в документации к калссу File метод makedirs. Он реализует как раз нужный мне в этом случае функционал. Чтобы им воспользоваться нужно подключить «ftools».


Пример использования:
require 'ftools'

File.makedirs('~/examples/newdir')

С удалением директорий почему-то мне повезло меньше. Удалить непустую директорию вроде бы невозможно. По крайней мере я не нашёл нужного метода и тогда принялся расширять функционал класса Dir. В результате моих раздумий появился метод clear!, который как раз и удаляет всё содержимое из директории, адрес которой передан ему в качестве параметра. Код метода:
class Dir
def clear!
counter = 0
map do |item|
if item != '.' && item != '..'
if File.directory?("#{path}/#{item}")
counter += Dir.new("#{path}/#{item}").clear!
Dir.rmdir "#{path}/#{item}"
else
File.unlink "#{path}/#{item}"
counter += 1
end
end
end
counter
end
end

Пользоваться очень просто, я делаю это так:
Dir.new('~/examples').clear!

Внимание! Методу всё равно какую папку очищать! Трижды проверьте свой код перед передачей параметров моему.

Замечу, что в приведённо выше примере сама директория «examples» не удалится, однако мне этого и не требовалось.

понедельник, 29 марта 2010 г.

изменение качества изображения из командной строки

sudo apt-get install imagemagick

convert P1020849.JPG -quality 15 P1020849_ew.JPG
сделать новый файл с 15% качеством.

convert -resize 800x800

четверг, 25 марта 2010 г.

Пересборка deb-пакета в Debian/Ubuntu

источник: http://www.ylsoftware.com/news/544
Очень часто у пользователей Debian, Ubuntu и других основанных на Debian дистрибутивов возникает необходимость пересобрать .deb-пакет какой-то программы из исходных текстов. Ниже будет показано как это можно сделать.
Немного конкретизируем задачу: автор этих строк использует дистрибутив Ubuntu Karmic (9.10), в репозитории которого есть Jabber-клиент Gajim версии 0.12.5, однако появилось желание использовать Gajim версии 0.13. Готового пакета для Karmic найдено не было, однако для Ubuntu Lucid (10.04) Alpha этот пакет уже был. Соответственно напрашивалось два варианта решения поставленной задачи:
  1. Подключить репозиторий Lucid, поставить Gajim из него, отключить репозиторий Lucid.
  2. Бэкпортировать (перенести пакет из более новой версии дистриубтива в более старую) пакет из Lucid в Karmic.
Автор решил использовать второй способ. Приступаем к решению этой задачи. Для начала нужно зайти на страницу пакета на http://packages.ubuntu.com и скачать архивы с исходными текстами. Для Gajim это страница http://packages.ubuntu.com/gajim а архивы (на момент написания статьи):
  • gajim_0.13-0ubuntu2.diff.gz
  • gajim_0.13.orig.tar.gz
  • gajim_0.13-0ubuntu2.dsc
Скачав эти файлы установим инструменты, необходимые для пересборки пакетов:
apt-get install build-essential dpkg-dev fakeroot
Теперь нужно перейти в ту директорию, куда мы скачали архивы с исходными текстами и распаковать эти архивы командой:
dpkg-source -x gajim_0.13-0ubuntu2.dsc
После распаковки будет создана директория с именем вида "имя_пакета-версия_пакета", в нашем случае имя будет "gajim-0.13", переходим в неё и пытаемся запустить сборку:
cd gajim-0.13 && dpkg-buildpackage -rfakeroot -b
Если будет выдано сообщение о не хватке каких-то пакетов — их нужно установить. Автору этих строк не хватило пакетов: python-dev, python-gtk2-dev, libxss-dev, libgtkspell-dev и dpatch. Список пакетов зависит от уже установленных пакетов и пересобираемой программы. Установим недостающие пакеты:
apt-get install python-dev python-gtk2-dev libxss-dev libgtkspell-dev dpatch
После успешной установки зависимостей запустим сборку командой:
dpkg-buildpackage -rfakeroot -b
Если и в этом случае сборка закончится неудачей — надо тщательно проанализировать сообщения об ошибке. Возможно придётся предварительно бэкпортировать более новые версии зависимостей и только потом собирать пакет.
У автора всё прошло гладко и был создан пакет "gajim_0.13-0ubuntu2_amd64.deb", расположенный в одной директории с архивами с исходными текстами. Теперь его можно установить командой:
sudo dpkg -i ../gajim_0.13-0ubuntu2_amd64.deb
Теперь можно пользоваться более новой версией любимой программы:) Остальные программы и библиотеки бэкпортируются аналогичным образом.
На этом всё. Приятной работы!


Анонимный посетитель 2010-01-24 18:04:56 (*)

> Если будет выдано сообщение о не хватке каких-то пакетов — их нужно установить.
Зачем? Есть штатные средства - apt-get build-dep gajim

MooSE 2010-01-24 20:28:06 (*)

Цитата:

Зачем? Есть штатные средства - apt-get build-dep gajim


Это всё клёво, но это работает в рамках текущего среза. Если ты ставишь версию новее чем в твоём репозитории - зависимости могут "поплыть".

morbo 2010-01-25 07:05:46 (*)

>После успешной установки можно зависимостей запустим сборку командой:

Слово "можно" - лишнее?

>Это всё клёво, но это работает в рамках текущего среза. Если ты ставишь версию новее чем в твоём репозитории - зависимости могут "поплыть".

Это всё клёво, но таки ставить зависимости лучше сначала с помощью apt-get build-dep gajim. Если всё нормально, то во-первых версия новее может скомпилироваться с зависимостями из текущего репозитория - тогда ничего дополнительно ни ставить ни бэкпортировать не придётся. А во-вторых, если она не скомпилируется, то хотя бы меньше придётся ставить и бэкпортировать.

Есть ещё такая вещь - atp-get source -b gajim, но это не бэкпортирование, а просто установка из исходников. Смысла в ней мало. Разве что скомпилировать пакет с более свежими установленными в системе зависимостями.

В целом по статье могу сказать, что это общеизвестный минимум.

MooSE 2010-01-25 09:13:40 (*)

Цитата:

Слово "можно" - лишнее?


Поправил. Спасибо.

Цитата:

В целом по статье могу сказать, что это общеизвестный минимум.


Не сомневаюсь. Вообще этот сайтик для меня скорее записная книжка, чтобы потом долго не искать.... :)

понедельник, 22 марта 2010 г.

Git через proxy

В домашней директории создаём файл  .gitconfig
вписываем туда свой proxy
[http] 
   proxy = 77.xxx.xxx.xxx:8123
 
И теперь при скачивании указываем
git clone http://github.com/scrooloose/vimfiles.git
 
надо просто git:// заменить на http://, тогда все работает 
 
пока не получилось сделать как http://blogs.gnome.org/juanje/2009/07/17/git_behind_proxy/ 
 
При работе с bitbucket.org через https возникла следующая ошибка
error: Couldn't resolve proxy '%http_proxy%' while accessing https://xxxxx@bitbucket.org/xxxx/xxxx/info/refs
fatal: HTTP request failed
 Помогло измерение в файле .gitconfig
 
  [http]
  proxy = https://xx.xx.xxx.xx:8080/
 
 
Если нужно использовать git по протоколу ssh:
Источник 1 
Источник 2 

Установливаем утилиту socat 
sudo aptitude install socat
 
Создаём файл .ssh/config  

Host=github.com
ProxyCommand=socat - PROXY:10.20.245.11:%h:%p,proxyport=8080 

пятница, 19 марта 2010 г.

Переводчик для VIM

источник 1: http://www.instanceof.ru/linux/vim/translate
источник 2: http://ru.wikibooks.org/wiki/Vim


Vim при переводах текста, или для чтения английской документации

Итак, чтобы можно было успешно читать и переводить документацию на английском языке, нужно ИМХО всего 3 вещи:
  • Редактор.
  • Переводчик.
  • проверка орфографии
Если их удобно объединить, то можно получить хорошую среду, для перевода/чтения.

Что возьмем

Редактор мы естественно возьмем VIM хотя бы потому что статья так называется. Переводчик mueller консольная версия, работает так:
% mueller sex
sex  [seks] _n. 1> _биол. пол; the weaker sex слАбый пол, жЕнщины; the sterner (или stronger) sex сИльный пол, мужчИны; the sex _шутл.  жЕнщины 2> секс 3> _at
tr. половОй, сексуАльный; sex instinct половОй инстИнкт; sex intergrade гермафродИт  
И орфографмометр: это spell в виме, словари скачаем с vim.org

Как настроим

Мне интересна возможность выпадающего списка, при наведением на неизвестное мне слово мышкой. Для этого, после долгого чтения манов (или гугленья) узнаем что с помошью команды system можно выполнить какое-то действие, вывод которой куда-либо записать. Короче, пишем где-нибудь в ~/.vimrc

function! MyBalloonExpr()
       return system("mueller ". v:beval_text)
endfunction
set bexpr=MyBalloonExpr()
set ballooneval
set balloondelay=100

Определили функцию MyBallonExpr которая будет формировать строку mueller [слово на которое навели] и выполнять. Результат выполнения будет выдавать в «балоне» выпадающем окошке, через 100 миллисекунд.
Естественно вместо mueller вы можите поставить любую другую программу, которая переводит текст.

Для перевода по нажатию клавиши

map   :call TRANSLATE()
function TRANSLATE()
   let  a=getline('.')
   let co=col('.')-1
   let starts=strridx(a," ",co)
   let ends = stridx(a," ",co)
   if ends==-1
       let ends=strlen(a)
   endif
   let res = strpart(a,starts+1,ends-starts)
   let cmds = "sdcv -n " . res
   let out = system(cmds)
   echo out
endfunction

Консольные хитрости

1.Копирование файлов с указанием прогресса. Всегда чертовски не хватало информативности в cp
rsync --progress file1 file2
2.Информация о использовании дискового пространства
           df -h

четверг, 18 марта 2010 г.

Пример скрипта

источник: http://linux-admin.net.ru/content/516
ПРИМЕР

#!/bin/bash
#################################################
#Keyfiles - tar/gzip configuration files        #
#Version:   Версия  1.0 (черновик)              #
#Ackn:      основан на идее Dave Turnbull       #
#Authour:   Thomas Adam                         #
#Date:      Понедельник 28 мая 2001, 16:05 BST  #
#Website:   www.squidproxyapps.org.uk           #
#Contact:   thomas@squidproxyapps.org.uk        #
########################################Комментарии

#Комментарии для Dave Turnbull. Чтобы он не заблудился :-).

#объявление переменных
configfile="/etc/keyfiles.conf"
tmpdir="/tmp"
wrkdir="/var/log/keyfiles"
tarfile=keyfiles-$(date +%d%m%Y).tgz
method=$1           #опции выбора операции
submethod=$2        #дополнительные опции для "$1"
quiet=0             #вывод отладочной информации (по умолчанию)

cmd=basename $0   #удаляем путь из имени файла
optfiles="Usage: $cmd [--default (--quiet)] [--listconffiles] [--restore (--quiet)] [--editconf] [--delold] [--version]"
version="keyfiles: Автор Thomas Adam, Версия 1.0 (Вторник 5 июня 2001, 23:42)"

#проверка конфигурационного файла...
if [ ! -e $configfile ]; then
  for beepthatbell in 1 2 3 4 5; do
    echo -en "\x07"
  done
  echo " " | mail -s "[Keyfiles]: отсутствует файл $configfile" $USER
  echo " [Ошибка!]: отсутствует файл $configfile" $USER
  exit -1
fi

#проверяем существование рабочей директории, если её нет, то создаём
[ ! -d $wrkdir ] && mkdir $wrkdir

#проверка того, запущен ли скрипт без опций
if [ -z $method ]; then
  echo $optfiles
  exit 0
fi

#синтаксический разбор командной строки
check_syntax ()
{
  case $method in
    --default)
    cmd_default
    ;;
    --listconffiles)
    cmd_listconffiles
    ;;
    --restore)
    shift 1
    cmd_restore
    ;;
    --editconf)
    exec $EDITOR $configfile
    exit 0
    ;;
    --delold)
    cd $wrkdir && rm -f ./*.old > /dev/null
    exit 0
    ;;
    --version)
    echo $version
    exit 0
    ;;
    --*|-*|*)
    echo $optfiles
    exit 0
    ;;
  esac
}

#Вот теперь и начинается самое интересное.....
#объявление функции используемой опцией "--default"
cmd_default ()
{

  #пакуем все файлы, указанные в $configfile

  if [ $submethod ]; then
    tar -cZPpsf $tmp/$tarfile $(cat $configfile) &>/dev/null 2>&1
  else
    tar -vcZPpsf $tmp/$tarfile $(cat $configfile)
  fi

  #если содержимое каталогов пусто......
  if test $(ls -1 $wrkdir | grep -c -) = "0"; then
    mv $tmp/$tarfile $wrkdir
    exit 0
  fi

  for i in $(ls $wrkdir/*.tgz); do
    mv $i $i.old
  done

  mv $tmp/$tarfile $wrkdir
}

#вывести список, содержащийся в $configfile
cmd_listconffiles ()
{
  sort -o $configfile $configfile
  cat $configfile
  exit 0
}

#восстановить файлы......
cmd_restore ()
{
  cp $wrkdir/keyfiles*.tgz /
  cd /

  #проверка флага тишины :-)
  if [ $submethod ]; then
    tar vzxfmp keyfiles*.tgz &>/dev/null 2>&1
    rm -f /keyfiles*.tgz
    exit 0
  else
    tar vzxfmp keyfiles*.tgz
    rm -f /keyfiles*.tgz
    exit 0
  fi
}

#вызов головной функции
check_syntax
-------------------
Следует заметить, что основные изменения, которые вы можете делать в скрипте -- это изменять три переменные:
configfile="/etc/keyfiles.conf"
tmpdir="/tmp"
wrkdir="/var/log/keyfiles"

Антивирус СlamAV

/etc/clamav/freshclam.conf  настройки обновления 
параметр Checks - кол-во обновлений в день с сервера обновлений

1. обновление базы clamav через proxy
Нужно в файле /etc/freshclam.conf прописать следующие строчки и раскоментить , прописав туда свои данные 
Code:
#HTTPProxyServer myproxy.com
#HTTPProxyPort 1234
#HTTPProxyUsername myusername
#HTTPProxyPassword mypass

2. Обновление баз вручную команда freshclam

3. Автоматическое обновление производится демоном
Для работы с демоном есть скрипт clamav-freshclam
находится он /etc/init.d/clamav-freshclam {no-daemon|start|stop|restart|force-reload|reload-log|skip|status}

4. Log обновления находится /var/log/clamav/freshclam.log




    

вторник, 16 марта 2010 г.

Точное время в Debian

1. С помощью следующей команды устанавливаем программу ntpdate:
   sudo aptitude install ntpdate

2.Внимательно читаем ридмишку к программе, которая располагается по адресу
/usr/share /doc/ntpdate/README.Debian.
Из ридмишки выносим следующее:
  • ntpdate не лучший вариант для использования
  • процесс синхронизации происходит каждый раз при “поднятии” сетевого интерфейса
3. Синхронизируем время
     sudo ntpdate debian.pool.ntp.org

аналог команда ntpdate-debian которая берет имена серверов для синхронизации из файла /etc/default/ntpdate
      параметр NTPDATE_USE_NTP_CONF=no чтобы не брать данные из /etc/ntp.conf (например: может быть не установлен пакет ntp)
      параметр NTPSERVERS= перечисляем сервера через пробел (у меня просто NTPSERVERS="10.132.70.90")

4. как сменить часовой пояс (при переезде) в Debian:
sudo dpkg-reconfigure tzdata
 
5. Добавляем задание в cron 
  Пример моего cron:   crontab -u root -l
SHELL=/bin/sh

# m h  dom mon dow   command
50 * * * * /usr/sbin/ntpdate-debian >> /home/sa/ntpdate-debian/ntpdate-debian.log


 
Для изменения cron команда crontab -u root -e  от имени root
после изменения не надо перезапускать cron 
 

Резюме

Была установлена программа ntpdate и с помощью нее было синхонизировано время. Программа будет синхронизировать время при понятии сетевого интерфеса (т.е. при включении или перезагрузки машины) + ее можно запускать руками в любоее вермя.
Такое решение прекрасно подходит для всех компьютеров, которые включаются хотя бы оди раз в день (за один день время далеко не убежит), т.е. для домашних машин и для ноутов. Для серверов, которые работают 24×7 это решение, является неоптимальным.

Удаленное подключение к рабочему столу Linux из Windows с помощью Xming и SSH

источник: http://debback.blogspot.com/2008/03/linux-windows-xming-ssh.html

Иногда приходится пользоваться тем, что дали. Мой компьютер, на котором стоит Debian Linux, был занят моей женой (не учите своих жен пользоваться линуксом). Зато был свободен компьютер сестры с установленным на нем Windows. И вот появилось желание подключиться к своему компьютеры с рабочей станции под управлением враждебной OS. Первым, что пришло в голову - это удаленный рабочий стол. Однако, нашлось более элегантное решение. И, несмотря на заголовок статьи, речь пойдет о немного другой технологии. Взгляните на этот снимок:


Вы видите приложения Linux прямо на рабочем столе Windows! Как же они туда попали?

Немного о теории. В отличие от Windows, в Linux графическая оболочка не является частью ядра системы. Стандартная оконная система для Linux - это X Window System, или, попросту говоря, иксы. Она берет на себя отрисовку графических элементов и взаимодействие с устройствами ввода-вывода. А самое вкусное заключается в том, что эта система имеет прозрачную клиент-серверную архитектуру. Оконная система выполняет роль сервера, а графические приложения - роль клиентов. Как и положено клиентам, они подключаются к серверу и взаимодействуют с ним для отрисовки и для получения событий мыши и клавиатуры.

Но это еще не все! Дело в том, что оконная система может находиться на другом компьютере, а графическое приложение связываться с ней через сеть. Так вы можете запустить приложение на удаленном компьютере, заставив его рисоваться на том компьютере, за которым сейчас работаете. Или наоборот. Или запустить программу на одном удаленном компьютере с отрисовкой интерфейса на другом удаленном компьютере. Заманчивая возможность, неправда ли? :-)

Думаю, достаточно теории, давайте приступим к практике.

Для начала подготовим удаленный компьютер Debian Linux. Все, что нам здесь нужно - это SSH-сервер. Через него мы будем подключаться удаленно и запускать нужные нам программы. Выполняем всего одну команду в консоли:

$ sudo apt-get install openssh-server

Все, с этим компьютером мы закончили, и касаться его клавиатуры в ходе этой статьи больше не будем. Теперь можем переходить к подготовке компьютера Windows. Здесь нужно установить две программы:

1. SSH-клиент. Я установил PuTTY.
2. X Server для Windows. Я выбрал Xming.

Обе программы можно загрузить с сайта SourceForge (пакеты Xming и Xming-portable-PuTTY). Также по желанию можно загрузить стандартный набор шрифтов (пакет Xming-fonts). Все, что загрузили - устанавливаем (с полной установкой всех компонент Xming), и переходим к настройке. Теперь главное не запутаться, что к чему будем подключать :-)

Для начала установим соединение по SSH с удаленным компьютером. Для этого запускаем PuTTY. Вводим IP-адрес компьютера Linux.


Теперь переходим в раздел Connection / SSH / X11 и включаем перенаправление графического интерфейса. В качестве расположения X-сервера водим IP-адрес компьютера Windows, за которым сейчас сидим.


Кроме того, чтобы вместо русских букв не всплыли крокозябли, желательно в разделе Window / Translation установит правильную кодировку (у меня - UTF8 - стандартная кодировка на Debian и Ubuntu). Возвращаемся в раздел Session, сохраняем настройки и подключаемся к компьютеру Linux. В случае успешного подключения мы вводим логин и пароль и видим текстовую консоль. С ее помощью мы можем удаленно запустить консольные программы, но графические программы не могут рисоваться в консоли. Поэтому оставим на время наше подключение по SSH.

Теперь настроим Xming. Для этого запускаем программу XLaunch - это мастер настроек. На первом шаге указываем способ интеграции в графическое окружение Windows. Мне более всего по душе первый, когда каждое приложение Linux находится в своем окне.


На втором шаге нам предлагается автоматически запускать какое-нибудь приложение вместе с иксами. Я предпочел сделать это позже по мере необходимости посредством уже запущенного нами PuTTY.


На третьем шаге указываем параметры запуска Xming. Опция Clipboard позволяет интегрировать буфер обмена. Также для полноценной работы я ввел следующие параметры:
"-dpi 96" - чтобы поправить размер шрифтов. Значение можно подбирать по вкусу.
"-xkblayout us,ru" - для работы с двумя раскладками клавиатуры.
"-xkbvariant basic,winkeys" - уточнение раскладок.
"-xkboptions grp:caps_toggle" - переключение раскладки клавишей CAPS LOCK.


И, наконец, на следующем шаге сохраняем настройки кнопкой "Save configuration" и запускаем X-сервер кнопкой "Готово".


В системном лотке появится иконка Xming


В дальнейшем запустить сервер с теми же настройками можно просто путем открытия сохраненного файла. Изменить настройки можно через контекстное меню файла.


Итак, X-сервер запущен. Возвращаемся в нашу консоль, предоставленную соединением SSH. Здесь мы можем удаленно запустить консольное приложение, и в этой же консоли увидим вывод этого приложения. А что теперь будет, если мы попытаемся запустить в этой консоли графическое приложение? Обычно, если вы подключились по SSH и пытаетесь запустить оконное приложение, вы получите ошибку, потому что вы подключились к удаленному компьютеру в консольном режиме, и рисовать окна просто нечем. Однако, в этот раз мы включили перенаправление графики на наш компьютер Windows, на котором уже запущен свой X-сервер. Поэтому, если вы попытаетесь запустить оконное приложение в удаленном консольном терминале, его окно нарисуется на компьютере Windows. Попробуйте, например, набрать следующую команду:

$ kwrite &
или
$ gedit &

Амперсанд в конце команды указывает, что программу нужно запустить в фоновом режиме, чтобы во время ее работы консоль была доступна для других действий.

Ну, надеюсь, у вас все получилось, и на вашем рабочем столе Windows красуются оконные приложения Linux.

Кстати говоря, благодаря этой клиент-серверной архитектуре злоумышленник может отправить на ваш экран окно с просьбой ввести ваш пароль или еще с какой-нибудь гадостью. Чтобы такого не происходило, не подключайтесь к общественным сетям без фаирвола. И помните: большие возможности - это большая ответственность.

Установка и настройка IceWM в минимальной конфигурации.

источник: http://avreg.net/howto_icewm.html
В статье рассматривается один из вариантов установки лёгкого оконного менеджера IceWM и его начальной настройки для создания графического рабочего стола (десктопа) «одного приложения».
Такая конфигурация может быть полезна при подготовке промышленных или служебных рабочих станций (операторы, кассиры, диспетчеры, охранники, и т.п.), в которых основные приложения работают в «графике».
Итого, нужно следующее:
  • система должна автоматически загружаться без участия пользователя и запускать основное рабочее приложение;
  • в системе не должно быть посторонних программ, кроме основной программы рабочего места и программ, необходимых для администрирования.
Рекомендуется что базовая система также удовлетворяет требованиям разумного минимализма (общее правило: больше возможностей и функций - больше дыр) (см. также «Установка дистрибутива Linux в минимальной конфигурации для эксплуатации в качестве сервера.»).
Требуется установленный и настроенный сервер Х ( читай «Установка и настройка сервера X.Org (X Window System).» ).
Уровень сложности: средний.
В. Почему IceWM?
О. По нашему мнению, в нём присутствует баланс скорости, безопасности, гибкости настройки и «привычности» интерфейса.
В. Не хочу IceWM.
О. Выбирайте любой оконный менеджер для X: 9wm, aewm, aewm++, afterstep, amaterus, amiwm, asclassic, blackbox, ctwm, dwm, enlightenment, evilwm, fluxbox, flwm, fvwm, fvwm-gnome, fvwm1, icewm, icewm-lite, ion2, jwm, kwin, larswm, lesstif-bin, lwm, metacity, olvwm, olwm, openbox, oroborus, pwm, qvwm, ratpoison, sapphire, sawfish, tinywm, twm, uwm, vtwm, w9wm, waimea, windowlab, wm2, wmaker, wmii, wmii2, xfwm4.
Для представления что такое оконный менеджер IceWM читаем:

Установка

Debian/Ubuntu

Ищем пакеты в описании которых есть упоминание о IceWM:
user@host:~$ apt-cache search icewm
icewm-lite - wonderful Win95-OS/2-Motif-like window manager
icewm-gnome-support - GNOME support files for IceWM
icedove-traybiff - traybiff - new mail alert for Icedove
grun - GTK based Run dialog
iceconf - Configuration tool for icewm
wmctrl - control an EWMH/NetWM compatible X Window Manager
icemc - Editor for IceWM menus
gsetroot - a C/Gtk-based front-end for Esetroot
dfm - Desktop-File-Manager for X11
icewm-experimental - wonderful Win95-OS/2-Motif-like window manager
fspanel - minimalist panel for X
icewm-common - wonderful Win95-OS/2-Motif-like window manager
icewm - wonderful Win95-OS/2-Motif-like window manager
icewm-themes - Theme files for the Ice Window Manager
Устанавливаем то, что выбрали и не забываем про эмулятор терминала xterm:
IceWM
user@host:~$ sudo aptitude install icewm xterm

# для локали ru_RU.UTF-8 устанавливаем в качестве x-terminal-emulator
# uxterm - X terminal emulator for for Unicode (UTF-8) environments
user@host:~$ sudo update-alternatives --set x-terminal-emulator /usr/bin/uxterm

RedHat/CentOS/Fedora

yum install icewm ??? FIXME

Настройка графического окружения

Выбор менеджером по-умолчанию.

В Debian/Ubuntu
Определяем icewm оконным менеджером по-умолчанию для всех пользователей.
Способ 1: определением x-window-manager и x-session-manager (также используются в скриптах xinit/startx) через подсистему альтернатив (man update-alternatives(8))
Примечание: переменная STARTUP не должна быть определена.
# доступные альтернативы для x-window-manager
user@host:~$ sudo update-alternatives --list x-window-manager
/usr/bin/icewm

# доступные альтернативы для x-session-manager
user@host:~$ sudo update-alternatives --list x-session-manager
/usr/bin/icewm-session

# смотрим кто сейчас x-window-manager
user@host:~$ ls -l /etc/alternatives/x-window-manager
lrwxrwxrwx 1 root root 14 2007-08-05 22:06 /etc/alternatives/x-window-manager -> /usr/bin/icewm
# если отличается от /usr/bin/icewm, то устанавливаем
user@host:~$ sudo update-alternatives --set x-window-manager /usr/bin/icewm
# проверяем
user@host:~$ ls -l /etc/alternatives/x-window-manager
lrwxrwxrwx 1 root root 14 2007-11-18 22:16 /etc/alternatives/x-window-manager -> /usr/bin/icewm

# смотрим кто сейчас x-session-manager
user@host:~$ ls -l /etc/alternatives/x-session-manager
lrwxrwxrwx 1 root root 14 2007-08-05 22:06 /etc/alternatives/x-window-manager -> /usr/bin/icewm-session
# если отличается от /usr/bin/icewm-session, то устанавливаем
user@host:~$ sudo update-alternatives --set x-session-manager /usr/bin/icewm-session
# проверяем
user@host:~$ ls -l /etc/alternatives/x-session-manager
lrwxrwxrwx 1 root root 22 2007-11-18 22:16 /etc/alternatives/x-session-manager -> /usr/bin/icewm-session
Способ 2 (устаревший): установкой глобальной переменной окружения STARTUP, которая обрабатывается скриптом xinit (startx).
user@host:~$ sudo echo 'STARTUP="icewm-session"' >> /etc/environment
Проверить состояние переменной можно командой env:
user@host:~$ env | grep STARTUP
STARTUP=icewm-session
Примечание: чтобы переменная «вступила» в силу нужно выйти из системы (logout) и войти заново (login).
Для проверки обоих способов используйте команду startx:
Запуск сервера X из консоли
user@host:~$ startx
Скриншот IceWM после установки.
IceWM

Отсекаем лишнее.

Все настройки IceWM расположены в конфигурационных файлах в каталогах:
  • /etc/X11/icewm - глобальные настройки для всех пользователей;
  • $HOME/.icewm - настройки пользователя, перекрывают глобальные;
Настройки распределены по смысловым группам и должны определяться строго в своих файлах:
  • theme - установки текущей темы;
  • preferences - главные параметры, yправляет поведением и общим внешним видом IceWM: пути, цвета, шрифты,…;
  • prefoverride - то же что и preferences, только может быть переопределено установками темы;
  • menu - управляет содержимым «стартового» меню;
  • programs - управляет содержимым «programs», подменю «стартового» меню;
  • toolbar - управляет рядом запускающих кнопок на панели задач, и имеет такой же синтаксис как и файл меню;
  • winoptions - управляет поведением отдельных приложений;
  • keys - глобальные сочетания клавиш для быстрого запуска приложений (прим: есть ещё уровень ниже: x key binding )
Описание и примеры (engl) см. в каталоге /usr/share/doc/icewm-common и http://www.icewm.org/manual/icewm-8.html
~/.icewm/preferences
user@host:~$ cat ~/.icewm/preferences
### Меню ###

# Отображать подменю программ
ShowProgramsMenu = 0

# ... подменю "Темы"
ShowThemesMenu = 0

# ... меню "Выход"
ShowLogoutMenu = 1
# Show logout submenu
ShowLogoutSubMenu = 0

# ... "Помощь"
ShowHelp = 0

# ... "О программе"
ShowAbout = 0

# ... "Запустить"
ShowRun = 0

# ... меню "Список окон"
ShowWindowList = 0


### Панель задач ###

# Отображать "Панель задач"
ShowTaskBar = 1

TaskBarShowAllWindows = 1

TaskBarShowMailboxStatus = 0
TaskBarShowWorkspaces = 0

TaskBarShowCPUStatus = 1
TaskBarCPUDelay = 1000
CPUStatusCommand='xterm -name top -title "TOP" -e /bin/sh -c "while : ; do top; sleep 5; clear; done"'

TaskBarShowNetStatus = 1
TaskBarNetDelay = 1000
NetStatusCommand = 'xterm -name netstat -title "Network Status" -e /bin/sh -c "while : ; do netstat -atun; sleep 5; clear; done"'
NetworkStatusDevice = 'eth0 eth1'
~/.icewm/toolba
user@host:~$ cat ~/.icewm/toolbar
# This is a default toolbar definition file for IceWM
#
# Place your personal variant in $HOME/.icewm directory.

prog XTerm xterm x-terminal-emulator
#prog    "Vim" vim /usr/bin/gvim -f
#prog    "WWW" /usr/share/pixmaps/firefox.png x-www-browser
prog    "avreg-mon" - x-terminal-emulator -e /usr/bin/avreg-mon -v
~/.icewm/menu
user@host:~$ cat ~/.icewm/menu
# This is an example for IceWM's menu definition file.
#
# Place your variants in /etc/X11/icewm or in $HOME/.icewm
# since modifications to this file will be discarded when you
# (re)install icewm.
#

prog Terminal xterm x-terminal-emulator -ls

Приложения в автозагрузку.

Включаем нужные приложения в автозагрузку по старту графической оболочки для конкретного пользователя:
# нужно войти под конкретным пользователем и перейти в его домашний каталог
user@host:~$ cd $HOME

# создаём каталог, с всеми пользовательскими настройками IceWM 
# (то есть можно потом клонировать для других юзеров)
user@host:~$ mkdir ~/.icewm

# создаём startup "автозагрузочный" сценарий
# показан метод с консоли, можно набрать в редакторе: 
# editor ~/.icewm/startup (исключая строки с командой cat и заключительным _EOF_)
user@host:~$ cat <<_EOF_ > ~/.icewm/startup
#!/bin/sh
# автозагрузка программ для icewm

# если установлен gkrellm
[ -x /usr/bin/gkrellm ] && /usr/bin/gkrellm&

# если установлен xxkb
[ -x /usr/bin/xxkb ] && /usr/bin/xxkb&

# если установлен локальный просмотрщик камер avreg-mon
# включать только после окончательной настройки AVReg
if [ -x /usr/bin/avreg-mon ]; then
   (sleep 3; /usr/bin/avreg-mon&)&
fi

# если установлен idesk
if [ -x /usr/bin/idesk ]; then
  (sleep 2; /usr/bin/idesk&)&
fi

exit 0

_EOF_

# делаем скрипт исполняемым
user@host:~$ chmod u+x ~/.icewm/startup

Переключатель раскладок клавиатуры XXKB.

Устанавливаем индикатор раскладки клавиатуры XXKB:
Debian/Ubuntu
user@host:~$  sudo aptitude install xxkb
Настройка xxkb (прим: глобально для всех пользователей) производится через файл /etc/X11/app-defaults/XXkb
Приводим отличия от стандартной версии конфигурационного файла:
  • «–» - помечены строки, которые нужно удалить,
  • »+» - добавить (обычно вместо удалённых).
/etc/X11/app-defaults/XXkb
-XXkb.mainwindow.enable: yes
+XXkb.mainwindow.enable: no

-XXkb.button.geometry: 15x15-60+7
+XXkb.button.geometry: 15x15-70+7

-XXkb.button.xpm.3: su15.xpm
-XXkb.button.xpm.4:

+XXkb.app_list.wm_class_name.ignore: gkrellm avreg-mon
Документация по настройке xxkb на русском языке:
"хитрый" способ, так как документ в KOI8-R, а локаль обычно в UTF-8
user@localhost:~$ zcat /usr/share/doc/xxkb/README.koi8.gz | iconv -f koi8-r | pager 

Вынос ярлыков для запуска на рабочий стол.

IceWM ничего не знает про ярлыки рабочего стола (иконки), поэтому для их использования понадобится приложение idesk.
Установка idesk в Debian/Ubuntu
user@host:~$ sudo aptitude install idesk
Создаём конфигурационный файл .ideskrc:
~/.ideskrc
user@host:~$ cat << _EOF_ > .ideskrc
table Config
  FontName: helvetica
  FontSize: 13
  FontColor: #37CFA6
  ToolTip.FontSize: 13
  ToolTip.FontName: helvetica
  ToolTip.ForeColor: #0000FF
  ToolTip.BackColor: #FFFFFF
  ToolTip.CaptionOnHover: true
  ToolTip.CaptionPlacement: Right
  Locked: true
  Transparency: 100
  Shadow: true
  ShadowColor: #000000
  ShadowX: 1
  ShadowY: 1
  Bold: true
  ClickDelay: 300
  IconSnap: true
  SnapWidth: 10
  SnapHeight: 10
  SnapOrigin: BottomRight
  SnapShadow: false
  SnapShadowTrans: 200
  CaptionOnHover: false
  CaptionPlacement: bottom
  FillStyle: fillinvert
  Background.Delay: 0
  Background.Source: None
  Background.File: None
  Background.Mode: Center
  Background.Color: #C2CCFF
end

table Actions
  Lock: control right doubleClk
  Reload: middle doubleClk
  Drag: left hold
  EndDrag: left singleClk
  Execute[0]: left doubleClk
end

_EOF_
Создаём каталог для файлов - ярлыков:
user@host:~$ mkdir .idesktop
Для примера создадим ярлык программы часов на рабочем столе:
user@host:~$ cat << _EOF_ > ~/.idesktop/xclock.lnk
table Icon
   Caption: Часы
   Icon: /usr/share/idesk/folder_home.xpm
   X: 31
   Y: 31
   Command[0]: /usr/bin/xclock
end

_EOF_
Документация по idesk:

Файловые менеджеры.

  • двухпанельные (с идеологией Norton Commander):
    • mc - Midnight Commander (на псевдографике, в консоли или в терминале);
    • emelfm, gentoo, worker - графические;
  • однопалельные в стиле проводника Win, но с табами:
    • pcmanfm или облегчённая версия без поддержки HAL pcmanfm-nohal.
Установка
Debian/Ubuntu
user@host:~$ sudo aptitude install ИМЯ_ПАКЕТА

Системные мониторы.

Если на целевом компьютере необходимо следить за системными показателями, такими как загрузка процессора, памяти, сети, заполнение диска(ов), можно воспользоваться графическими апплетами рабочего стола из класса системных мониторов.
В легковесных графических WM, к которым относится IceWM, нет встроенных мониторов как в полновесных GNONE и KDE, однако эта ситуация легко разрешается установкой «внешних» апплетов.
Мы советуем обратить внимание на два таких монитора:
  1. gkrellm
  1. conky

Заключительные операции

Автологин (вход без ввода пароля).

Автоматический вход в систему под определённым пользователем без ввода пароля с загрузка графической оболочки (и соответственно программ в «автозагрузке»).
В конце фазы загрузки любого дистрибутива Linux Вы увидите приглашение на вход в систему (login).
Если Вы физически находитесь прямо за целевым компьютером, то такое приглашение будет
  1. либо в текстовом режиме - на системной или виртуальной консоли,
  2. либо в графическом режиме - это работают дисплейные менеджеры gdm, kdm, xdm.
Если у Вас 2 случай - удаляйте эти пакеты (gdm, kdm, xdm) и перегружайтесь (загрузка должна остановиться на текстовом приглашении), так как, для обеспечения автологина нам нужно самостоятельно «поднимать» сервер X.
Как правило в большинстве дистрибутивов есть скрипт /etc/init.d/rc.local (пути могут быть несколько другими), который выполняется одним из последних, среди всех демонов(сервисов)
В свою очередь, /etc/init.d/rc.local, выполняет скрипт /etc/rc.local, в который мы и вставим команду, которая:
  1. обеспечит вход в систему пользователя с именем luser (подставьте своего);
  2. запустит графический сервер Х (далее нужные приложения см. #Приложения в автозагрузку).
Открываем в редакторе файл /etc/rc.local
user@host:~$ sudo editor /etc/rc.local
и добавляем в конец, перед последней строкой «exit 0», строки:
Bash
# автологин пользователя с именем "luser" с последующим запуском графической оболочки
/bin/su - luser -c "/bin/sh -lc startx"
Однако это ещё не всё. Теперь нужно определить кто может запускать сервер X.
Варианты:
  • только root;
  • пользователь с консоли;
  • кто-угодно (выберите этот вариант).
Debian/Ubunty
user@host:~$ sudo dpkg-reconfigure x11-common
user@host:~$ sudo /etc/init.d/x11-common restart
В других дистрибутивах просто отредактируйте файл /etc/X11/Xwrapper.config, определив параметр «allowed_users» значением «anybody»
user@host:~$ cat /etc/X11/Xwrapper.config
# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# See the Xwrapper.config(5) manual page for more information.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
#   dpkg-reconfigure x11-common

allowed_users=anybody
nice_value=0
Перегружаемся для проверки.
user@host:~$ sudo reboot
или
user@host:~$ sudo shutdown -r now

Очистка xsession-errors

В домашнем каталоге пользователя присутствует файл .xsession-errors в который дописывается STDERR вывод приложений, запускаемых в графической оболочке.
Проблема в том, что .xsession-errors файл умеет только «расти» и нужно как-то его очищать или запретить дозапись.
Приводим глобальный способ для всех пользователей через правку скрипта Xsession, выполняемого по startx или десктоп-менеджером, таким как xdm, gdm, kdm.
патч
debian:/etc/X11# diff -u /etc/X11/Xsession.orig  /etc/X11/Xsession
--- /etc/X11/Xsession.orig      2007-11-19 04:50:31.000000000 +0300
+++ /etc/X11/Xsession   2007-11-19 04:50:56.000000000 +0300
@@ -91,7 +91,7 @@
   errormsg "unable to create X session log/error file; aborting."
 fi

-exec >>"$ERRFILE" 2>&1
+exec >"$ERRFILE" 2>&1

 echo "$PROGNAME: X session started for $LOGNAME at $(date)"

Защита конфигурации

Необходимо обеспечить, что конфигурация рабочего стола не была случайно или не случайно испорчена вандалом юзером.
Вспоминаем, что все настройки, произведённые в примерах этой статьи находятся и сохранены в файловой системе (файлах). Это значит, что для нашей задачи нужно просто запретить изменение файлов и каталогов.
Например:
user@host:~$ sudo chown -R root .icewm .idesktop .ideskrc .bash*

Основы управления доступом к файлам

истчник: http://www.opennet.ru/base/sys/file_access.txt.html
Курс молодого бойца. Основы управления доступом к файлам.

   Операционная система Linux - это многопользовательская система,
   которая дает огромные возможности манипулирования доступом к данным
   для каждого пользователя отдельно. Это позволяет гибко регулировать
   отношения между пользователями, объединяя их в группы, что позволит
   защитить данные одного пользователя от нежелательного вмешательства
   других.
   
   Бессмысленно считать, что файловая система это не самая важная часть
   операционной системы, поскольку все данные пользователей хранятся
   именно в файлах.
   
   В UNIX-подобных системах файлы также обеспечивают доступ к
   периферийным устройствам, дисковым накопителям, принтерам и т.п.
   
  UID, GID
  
   Каждый пользователь в системе имеет свой уникальный идентификационный
   номер (user-ID, или UID). Также пользователи могут объединяться в
   группы, которые в свою очередь имеют group-ID, или GID. Чтобы узнать
   свой UID и GID, т.е. уникальный номер пользователя и номер группы, к
   которой Вы принадлежите, необходимо ввести команду id:
   
   [dmitry@localhost dmitry]$id
   uid=502 (dmitry) gid=503(users) groups=503(users)
   
  Права доступа к файлам
  
   В свою очередь файлы имеют двух владельцев: пользователя (user owner)
   и группу пользователей (group owner). Для каждого файла есть
   индивидуальные права доступа, которые разбиты на три группы:
    1. Доступ для пользователя-владельца файла (owner).
    2. Доступ для группы-владельца файла (group).
    3. Доступ для остальных пользователей (others).
       
   Для каждой категории устанавливаются три вида доступа: (x) - право на
   запуск файла, (r) - право на чтение файла, (w) - право на изменение
   (редактирование) файла.
   
   Для того, чтобы увидеть права доступа к файлам необходимо ввести
   команду ls с ключом -l:
   
   [dmitry@localhost dmitry]$ls -l /home/file.tmp
   -rwxr-xr-- 1 dmitry users 33 Dec 1 00:38 file.tmp 
   
   Для данного примера мы видим, что владелец имеет права на чтение,
   запись, и выполнение (первые три буквы rwx), группа пользователей
   может лишь читать и выполнять этот файл (следующие три r-x), ну а
   остальные пользователи могут только читать данный файл (последние
   символы r--).
   
  Изменение прав доступа
  
   Права пользователя могут быть изменены только владельцем файла или
   пользователем с правами администратора системы. Для изменения прав
   используется команда
   
   chmod [ u | g | o | a ] [+ | - | = ] [r | w | x ] name1 [name2 ...].
   
   В качестве аргументов команда принимает указание классов доступа ('u'
   - владелец-пользователь, 'g' - владелец-группа, 'o' - остальные
   пользователи, 'a' - все вышеперечисленные группы вместе), права
   доступа ('r' - чтение, 'w' - запись, 'x' - выполнение) и операцию,
   которую необходимо произвести ('+' - добавить, '-' -убрать, '=' -
   присвоить).
   
   Таким образом, чтобы разрешить выполнение файла prog.pl всем
   пользователем необходимо выполнить команду:
   
   [dmitry@localhost dmitry]$ chmod a+x prog.pl
   
   Далее, чтобы оставить права записи только для владельца файла
   необходимо выполнить:
   
   [dmitry@localhost dmitry]$ chmod go-w prog.pl
   
   Рассмотрим еще несколько примеров:
   
   $ chmod go=w prog.pl установить право на запись для всех пользователей
   кроме владельца 
   $ chmod a+x prog.pl предоставить право на запись для всех
   пользователей 
   $ chmod g+x-w prog.pl Добавить для группы право на выполнения файла,
   но снять право на запись 
   
   Права доступа можно представить в виде битовой строки, в которой
   каждые 3 бита определяют права доступа для соответствующей категории
   пользователей, как представлено в таблице:
   
   rwx rwx rwx
   421 421 421
   user group others
   владелец группа остальные
   
   Таким образом, для команды chmod 666 prog.pl имеем:
   
   [dmitry@localhost dmitry]$ chmod 666 prog.pl
   [dmitry@localhost dmitry]$ ls -l prog.pl
   -rw-rw-rw- 1 dmitry users 78 Nov 20 prog.pl
   
   Команда chmod 644 somefile устанавливает "обычные" права доступа, т.е.
   владелец может читать и записывать в файл, а все остальные
   пользователи - только читать.
   
  Особенности прав доступа для каталогов
  
   Права доступа для каталогов не столь очевидны. Это в первую очередь
   связано с тем, что система трактует операции чтения и записи для
   каталогов отлично от остальных файлов. Право чтения каталога позволяет
   Вам получить имена (и только имена) файлов, находящихся в данном
   каталоге. Чтобы получить дополнительную информацию о файлах каталога
   (например, подробный листинг команды ls -l), системы придется
   "заглянуть" в метаданные файлов, что требует права на выполнения для
   каталога. Право на выполнение также потребуется для каталога, в
   который Вы захотите перейти (т.е. сделать его текущим) с помощью
   команды cd.
   
  T-бит, SUID и SGID
  
   Наиболее внимательные пользователи быстро замечают, что помимо
   стандартных "rwx" значений существуют еще и буквы "s" и "t". В
   действительности, битовая маска прав доступа к файлам содержит 4
   группы по 3 бита в каждой. Таким образом, команда chmod 755 это всего
   лишь краткая запись полной формы команды: chmod 0755.
   
   t-бит обычно используется с каталогами.
   
   Обычно, когда t-бит для каталога не установлен, файл в данном каталоге
   может удалить любой пользователь, имеющий доступ на запись к данному
   файлу. Устанавливая t-бит на каталог мы меняем это правило таким
   образом, что удалить файл из каталога может только владелец этого
   каталога или файла.
   
   Установить t-бит можно при помощи команд chmod a+tw somefile или chmod
   1777 somefile.
   
   Атрибуты SUID и SGID позволяют изменить права пользователя при запуске
   на выполнения файла, имеющего эти атрибуты.
   
   Запускаемая программа получает права доступа к системным ресурсам на
   основе прав доступа пользователя, запустившего программу. Установка же
   флагов SUID и SGID изменяет это правило таким образом, что назначает
   права доступа к системным ресурсам исходя из прав доступа владельца
   файла. Т.е. запущенный исполняемый файл, которым владеет
   суперпользователь, получает права доступа к системным ресурсам на
   уровне суперпользователя (фактически неограниченные). При этом
   установка SUID приведет к наследованию прав владельца-пользователя
   файла, а установка SGID -владельца-группы.
   
   В завершении хочется отметить, что пользоваться такими мощными
   атрибутами как SUID и SGID нужно с крайней осторожностью, особенно
   подвергать пристальному вниманию программы и скрипты, владельцем
   которых является root (суперпользователь), т.к. это потенциальная
   угроза безопасности системы.

понедельник, 15 марта 2010 г.

Links2 - продвинутый консольный браузер для Linux

Источник: http://itshaman.ru/it-programmy-dlya-linux/85/links2-browser-linux-ubuntu
Сервер, работающий на ОС Linux, у хорошего системного администратора не имеет графического интерфейса, так как все системные ресурсы должны быть направлены в нужное русло и тратить их на вырисовывание всяких "окошечек" не хорошо.
Для того, чтобы выйти в Интернет на таком сервере и нужны консольные браузеры. Таким инструментом может выступать консольный бразер Links2, который не смотря на свою "консольность" умеет немало. Основным достоинством браузера Links2 является то, что он умеет подгружать картинки.

Немного истории


Peter Gervai разработал консольный браузер Links, который позднее разделился на 3 независимых дистрибутива: ELinks, Links Hacked и Links2.
Отличительная особенность ELinks заключается в наличие встроенного языка программирования Lua. Links Hacked - это попытка доработать браузер ELinks. Links2 - это консольный браузер, о котором пойдет речь далее.

Скриншоты


Links2 - 
продвинутый консольный браузер для LinuxLinks2 - 
продвинутый консольный браузер для LinuxLinks2 - 
продвинутый консольный браузер для Linux

Описание


Сильные стороны Links2:

  • Links2 является консольным браузером, по этому он работает без какой-либо графической оболочки.
  • Браузер умеет загружать картинки.
  • Links2 умеет добавлять WEB-страницу в закладки.
  • Встроенный менеджер закачек.
  • Корректно работает с сайтами, использующих frame.
  • Links2 умеет обрабатывать JavaScript код на WEB-странице.
  • Поддерживается работа через proxy.
  • Есть возможность просмотра HTML-кода страницы..
  • Есть версии для ОС: Windows, Linux и Unix.
  • Ведется история посещенных сайтов.
  • Составление "БАН"-листа ненужных изображений.

Слабые стороны Links2:

  • Не поддерживается CSS. Сайты выводятся сплошным HTML-потоком.
  • Не поддерживается работа с RSS.
  • Не "вкладочный" интерфейс.
  • Язык интерфейса: русский, английский и т.д.
  • Лицензия: GNU GPL ver.2
  • Домашняя страница:http://links.twibright.com

Установка


Links2 входит в состав официального репозитория семейства операционных систем *buntu.
Для установки Links2 в *buntu:
# sudo apt-get install links2
Для запуска браузера в консоли набираем:
# links2 -g

пятница, 5 марта 2010 г.

Настройка conky: Индикация состояния системы в Linux

Источник: http://mydebianblog.blogspot.com/2007/10/conky.html
http://www.linuxcenter.ru/lib/articles/soft/conky_as_example.phtml

запуск -> conky
запуск как демона -> conky - d
запуск с другим файлом настройки -> conky - c имя_файла

Весьма удобно следить за состоянием своей системы, не слишком отрываясь от других задач. Здорово бросить взгляд на информативную панельку - и сразу получить всю информацию о работы системы, которая нужна. Именно для этих целей есть системные мониторы, например conky. Настроить conky в Linux очень просто, о чём и будет этот пост.


Умолчания, стиль и необходимость настройки conky
По умолчанию, установленный conky выглядит жутковато. Это такой тонкий намёк на то, что программу нужно подгонять под себя и свои представления об удобстве. Дело это до некоторой степени кропотливое, но сделав это раз, потом много раз экономим время.

Настраивается conky через свой конфиг, который нужно скопировать из /usr/share/doc/conky/examples/ в свой домашний каталог и переименовать в .conkyrc
Теперь открываем конфиг в своём любимом текстовом редакторе и начинаем его смотреть. Делится конфиг на две части: первая часть отвечает за то, как будет выглядеть системный монитор, а вторая - что он, собственно, будет отображать. Деление не строгое, и открыв конфиг, можно понять, почему.


Настраиваем conky под себя
В первой части конфиг довольно хорошо прокомментирован (во всяком случае, в Дебиане). Несколько наиболее важных параметров приведу ниже. Но прежде, чем вы начнёте запускать и пробовать, нужно кое-что учесть.

Во-первых, процесс это увлекательный и может отвлечь на долго (у меня это отняло вечер).

Во-вторых, процесс это исключительно интерактивный: меняете настройку - прибиваете текущий процесс conky - запускаете новый - смотрите - меняете настройку... и так далее. Лучше руководствоваться Первой Заповедью Радиотехники - "Не крути две ручки сразу". Иначе потом трудно ловить ошибки в конфиге и думать, что привело к нежелательным последствиям.

Итак, первая часть параметров отвечает за то, как будет выглядеть системный монитор. Здесь можно выбрать, в частности, шрифт и его параметры:
# Xft font when Xft is enabled
xftfont Bitstream Vera Sans Mono:size=9
Время обновления, если в этом нет насущной необходимости, лучше ставить 1-2 секунды, хотя можно и меньше (тогда возрастает потребление ресурсов):

# Update interval in seconds
update_interval 2.0
Расположение по углам экрана, что тоже хорошо прокомментировано и потому понятно:
# Text alignment, other possible values are commented
#alignment top_left
#alignment top_right
#alignment bottom_left
alignment bottom_right
Ещё подробностей можно прочитать в официальном FAQ conky или, пользуясь своими знаниями английского, догадаться :-)

Это всё довольно просто - главное развлечение начинается при настройке переменных, которые и будут отображаться. Лучше всего за основу взять какой-нибудь образцовый конфиг отсюда и брать понравившиеся элементы. В этой замечательной статье (на русском!) есть много интересных идей - только читать её нужно с конца (пропуская философские отвлечения).
Короче говоря: вторая часть конфига выглядит примерно так
${переменная параметры}
$элемент оформления
${color цветтекста}
${переменная параметры}
...
Назначение переменных в основном понятно из их названий:
  • exec выводит на экран текст, возвращаемый вызываемой программой;
  • execbar и execgraph визуализируют вывод исполняемой команды в виде диаграммы или графика (выводимое значение должно лежать в пределах 0..100);
  • execi и texeci запускают команду циклически с интервалом (texeci — с интервалом, заведомо большим времени исполнения). execibar и execigraph полностью аналогичны execbar и execgraph, но для циклического выполнения команд;
  • if_running, if_existing и if_mounted — выводят всё вплоть до endif, если выполняется процесс, существует файл и монтирована точка монтирования, соответственно;
  • else — выводить, если ложны все вышестоящие выражения.

Надо сказать, что применение execi особенно для скриптов - дело довольно затратное, и скрипты лучше отрабатывать таким образом не часто (раз в несколько секунд).

Ниже - несколько наиболее интересных решений для отображения данных в conky.

Показывать текущее время в формате часы:минуты:секунды
${time %k:%M:%S}

Отображение занимаемой приложениями памяти
$mem/$memmax
Вот тут у меня был лёгкий конфуз: часто значения отображаемой памяти были неприлично маленькими - это происходит оттого, что не учитывается память, занятая кэшем.
Вывести три самых охочих до процессора приложения:
${color #ddaa00} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
Несколько более сложным является отображение ACPI-данных о процессоре или питании системы. В этом нам помогут замечательные программы cat и cut. Вот как, например, вывести информацию о температуре на процессоре и включения троттлинга:

${color lightgrey} Core: $color ${
execi 2 cat /proc/acpi/thermal_zone/THRM/temperature | cut -c26-} - critical 115 C - ${color lightgrey} Throttling state: $color ${execi 2 cat /proc/acpi/processor/CPU1/throttling | grep active | cut -c26-}

Для удобства я подсветил цветом: красным - команды conky, серым - текст, который будет выведен, синим - системные команды, которые дают необходимые значения, зелёным - пути до данных ACPI (у вас они будут, скорее всего, другими).

Более навороченные трюки, типа отображения степени зарядки батареи ноутбука, описываются опять-таки здесь ближе к концу статьи. Напоследок - скриншот моего conky и текст его конфига.



И текст конфига .conkyrc который это обеспечивает (внимание, для отображения заряда батарей используется обращение к скрипту, которого у вас может не быть). Вот образец конфигурационного файла conky
# Conky advanced configuration
background yes

# Use Xft?
use_xft yes

# Xft font when Xft is enabled
xftfont Bitstream Vera Sans Mono:size=9

# Text alpha when using Xft
xftalpha 0.8

# Update interval in seconds
update_interval 2.0

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window no

# If own_window is yes, you may use type normal, desktop or override
own_window_type normal

# Use pseudo transparency with own_window?
own_window_transparent yes

# If own_window is yes, these window manager hints may be used
#own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Minimum size of text area
minimum_size 300 5

# Draw shades?
draw_shades yes

# Draw outlines?
draw_outline no

# Draw borders around text
draw_borders no

# Draw borders around graphs
draw_graph_borders no

# Stippled borders?
stippled_borders 8

# border margins
border_margin 40

# border width
border_width 1

# Default colors and also border colors
default_color white
default_shade_color black
default_outline_color black

# Text alignment, other possible values are commented
#alignment top_left
#alignment top_right
#alignment bottom_left
alignment bottom_right
#alignment none

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 12
gap_y 12

# Subtract file system buffers from used memory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase no

# number of cpu samples to average
# set to 1 to disable averaging
cpu_avg_samples 2

# number of net samples to average
# set to 1 to disable averaging
net_avg_samples 2

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale no

# Add spaces to keep things from moving about?  This only affects certain objects.
use_spacer no

# Maximum size of buffer for user text, i.e. below TEXT line.
#max_user_text 16384

# Allow for the creation of at least this number of port monitors (if 0 or not set, default is 16) 
#min_port_monitors 16

# Allow each port monitor to track at least this many connections (if 0 or not set, default is 256)
#min_port_monitor_connections 256

# variable is given either in format $variable or in ${variable}. Latter
# allows characters right after the variable and must be used in network
# stuff because of an argument

# stuff after 'TEXT' will be formatted on screen

TEXT
$nodename - $sysname $kernel on $machine
$stippled_hr
${color lightgrey}Current time: $color ${time %k:%M:%S} - ${color lightgrey}Uptime:$color $uptime ${color lightgrey}- Load:$color $loadavg
${color lightgrey}CPU Usage:${color #cc2222} $cpu% ${cpubar}
${color blue}${cpugraph 0000ff 00ff00}
${color lightgrey}RAM Usage:$color $mem/$memmax  -  Swap Usage:$color $swap/$swapmax - $swapperc% 
${color lightgrey}File systems: $color${fs_free /}/${fs_size /} ${fs_bar /}
${color lightgrey}Processes:$color $processes  ${color grey}Running:$color $running_processes 
$stippled_hr
${color}Name              PID     CPU%   MEM%
${color #ddaa00} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color}Mem usage
${color #ddaa00} ${top_mem name 1} ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}
${color lightgrey} ${top_mem name 2} ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
${color lightgrey} ${top_mem name 3} ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}
$stippled_hr
${color blue}System health ${color lightgrey} 
${color lightgrey} Core: $color ${execi 2 cat /proc/acpi/thermal_zone/THRM/temperature | cut -c26-} - critical 115 C - ${color lightgrey} Throttling state: $color ${execi 2 cat /proc/acpi/processor/CPU1/throttling | grep active | cut -c26-}
${color lightgrey} Core clock: $color ${execi 2 cat /proc/cpuinfo | grep 'cpu MHz' | cut -c12-} 
$stippled_hr
${color red}Energy subsystem:
${color lightgrey}Power: $color${execi 2 cat /proc/acpi/ac_adapter/AC0/state | cut -c26-} - ${color lightgrey}Charging state:$color ${execi 2 cat /proc/acpi/battery/BAT0/state | grep charging | cut -c26-} 
${color lightgrey}Present rate :$color ${execi 2 cat /proc/acpi/battery/BAT0/state | grep 'present rate' | cut -c26-} - ${color lightgrey}Battery energy:${color green} ${execi 2 /usr/bin/myscript/kmvbatterystate}%
$color $stippled_hr
${color #ddaa00}Port(s)${alignr}#Connections   
$color Inbound: ${tcp_portmon 1 32767 count}  Outbound: ${tcp_portmon 32768 61000 count}${alignr}ALL: ${tcp_portmon 1 65535 count}
${color #ddaa00}Inbound Connection ${alignr} Local Service/Port$color
 ${tcp_portmon 1 32767 rhost 0} ${alignr} ${tcp_portmon 1 32767 lservice 0}
 ${tcp_portmon 1 32767 rhost 1} ${alignr} ${tcp_portmon 1 32767 lservice 1}
 ${tcp_portmon 1 32767 rhost 2} ${alignr} ${tcp_portmon 1 32767 lservice 2}
${color #ddaa00}Outbound Connection ${alignr} Remote Service/Port$color
 ${tcp_portmon 32768 61000 rhost 0} ${alignr} ${tcp_portmon 32768 61000 rservice 0}
 ${tcp_portmon 32768 61000 rhost 1} ${alignr} ${tcp_portmon 32768 61000 rservice 1}
 ${tcp_portmon 32768 61000 rhost 2} ${alignr} ${tcp_portmon 32768 61000 rservice 2}

Скрипт для отображения заряда батареи /usr/bin/myscript/kmvbatterystate
#!/bin/sh
      MAX=`cat /proc/acpi/battery/BAT0/info | grep 'design capacity:' | cut -b26-30`
      CUR=`cat /proc/acpi/battery/BAT0/state | grep remaining | cut -d':' -f2 | cut -d' ' -f7`
      PRC=$(( $CUR * 100 / $MAX ))
      echo $PRC
Ещё раз напомню, что у вас пути в /proc к информации об ACPI могут быть другими.

СсылкиЕсть очень хорошая статья про conky, и даже на русском, но там вначале довольно много философии. Полный список переменных есть тут.

а если копируете статью - поставьте ссылку на оригинал!

Ярлыки

Архив блога