Когда встал вопрос о создании новой папки быстренько нашёл в документации к классу 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» не удалится, однако мне этого и не требовалось.
Очень часто у пользователей Debian, Ubuntu и других основанных на Debian дистрибутивов возникает необходимость пересобрать .deb-пакет какой-то программы из исходных текстов. Ниже будет показано как это можно сделать.
Немного конкретизируем задачу: автор этих строк использует дистрибутив Ubuntu Karmic (9.10), в репозитории которого есть Jabber-клиент Gajim версии 0.12.5, однако появилось желание использовать Gajim версии 0.13. Готового пакета для Karmic найдено не было, однако для Ubuntu Lucid (10.04) Alpha этот пакет уже был. Соответственно напрашивалось два варианта решения поставленной задачи:
Подключить репозиторий Lucid, поставить Gajim из него, отключить репозиторий Lucid.
Бэкпортировать (перенести пакет из более новой версии дистриубтива в более старую) пакет из 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. Список пакетов зависит от уже установленных пакетов и пересобираемой программы. Установим недостающие пакеты:
После успешной установки зависимостей запустим сборку командой:
dpkg-buildpackage -rfakeroot -b
Если и в этом случае сборка закончится неудачей — надо тщательно проанализировать сообщения об ошибке. Возможно придётся предварительно бэкпортировать более новые версии зависимостей и только потом собирать пакет.
У автора всё прошло гладко и был создан пакет "gajim_0.13-0ubuntu2_amd64.deb", расположенный в одной директории с архивами с исходными текстами. Теперь его можно установить командой:
sudo dpkg -i ../gajim_0.13-0ubuntu2_amd64.deb
Теперь можно пользоваться более новой версией любимой программы:) Остальные программы и библиотеки бэкпортируются аналогичным образом.
>После успешной установки можно зависимостей запустим сборку командой:
Слово "можно" - лишнее?
>Это всё клёво, но это работает в рамках текущего среза. Если ты ставишь версию новее чем в твоём репозитории - зависимости могут "поплыть".
Это всё клёво, но таки ставить зависимости лучше сначала с помощью apt-get build-dep gajim. Если всё нормально, то во-первых версия новее может скомпилироваться с зависимостями из текущего репозитория - тогда ничего дополнительно ни ставить ни бэкпортировать не придётся. А во-вторых, если она не скомпилируется, то хотя бы меньше придётся ставить и бэкпортировать.
Есть ещё такая вещь - atp-get source -b gajim, но это не бэкпортирование, а просто установка из исходников. Смысла в ней мало. Разве что скомпилировать пакет с более свежими установленными в системе зависимостями.
В целом по статье могу сказать, что это общеизвестный минимум.
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
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
#!/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
-------------------
Следует заметить, что основные изменения, которые вы можете делать в скрипте -- это изменять три переменные:
/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
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 это решение, является неоптимальным.
Иногда приходится пользоваться тем, что дали. Мой компьютер, на котором стоит 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 и его начальной настройки для создания графического рабочего стола (десктопа) «одного приложения».
Такая конфигурация может быть полезна при подготовке промышленных или служебных рабочих станций (операторы, кассиры, диспетчеры, охранники, и т.п.), в которых основные приложения работают в «графике».
Итого, нужно следующее:
система должна автоматически загружаться без участия пользователя и запускать основное рабочее приложение;
в системе не должно быть посторонних программ, кроме основной программы рабочего места и программ, необходимых для администрирования.
Рекомендуется что базовая система также удовлетворяет требованиям разумного минимализма (общее правило: больше возможностей и функций - больше дыр) (см. также «Установка дистрибутива 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 читаем:
Определяем 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).
Примечание: чтобы переменная «вступила» в силу нужно выйти из системы (logout) и войти заново (login).
Для проверки обоих способов используйте команду startx:
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 (прим: глобально для всех пользователей) производится через файл /etc/X11/app-defaults/XXkb
Приводим отличия от стандартной версии конфигурационного файла:
Если на целевом компьютере необходимо следить за системными показателями, такими как загрузка процессора, памяти, сети, заполнение диска(ов), можно воспользоваться графическими апплетами рабочего стола из класса системных мониторов.
В легковесных графических WM, к которым относится IceWM, нет встроенных мониторов как в полновесных GNONE и KDE, однако эта ситуация легко разрешается установкой «внешних» апплетов.
Мы советуем обратить внимание на два таких монитора:
Автоматический вход в систему под определённым пользователем без ввода пароля с загрузка графической оболочки (и соответственно программ в «автозагрузке»).
В конце фазы загрузки любого дистрибутива Linux Вы увидите приглашение на вход в систему (login).
Если Вы физически находитесь прямо за целевым компьютером, то такое приглашение будет
либо в текстовом режиме - на системной или виртуальной консоли,
либо в графическом режиме - это работают дисплейные менеджеры gdm, kdm, xdm.
Если у Вас 2 случай - удаляйте эти пакеты (gdm, kdm, xdm) и перегружайтесь (загрузка должна остановиться на текстовом приглашении), так как, для обеспечения автологина нам нужно самостоятельно «поднимать» сервер X.
Как правило в большинстве дистрибутивов есть скрипт /etc/init.d/rc.local (пути могут быть несколько другими), который выполняется одним из последних, среди всех демонов(сервисов)
В свою очередь, /etc/init.d/rc.local, выполняет скрипт /etc/rc.local, в который мы и вставим команду, которая:
обеспечит вход в систему пользователя с именем luser (подставьте своего);
запустит графический сервер Х (далее нужные приложения см. #Приложения в автозагрузку).
Открываем в редакторе файл /etc/rc.local
user@host:~$ sudo editor /etc/rc.local
и добавляем в конец, перед последней строкой «exit 0», строки:
Bash
# автологин пользователя с именем "luser" с последующим запуском графической оболочки
/bin/su - luser -c "/bin/sh -lc startx"
Однако это ещё не всё. Теперь нужно определить кто может запускать сервер X.
Варианты:
В других дистрибутивах просто отредактируйте файл /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 в который дописывается 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)"
Необходимо обеспечить, что конфигурация рабочего стола не была случайно или не случайно испорчена вандалом юзером.
Вспоминаем, что все настройки, произведённые в примерах этой статьи находятся и сохранены в файловой системе (файлах). Это значит, что для нашей задачи нужно просто запретить изменение файлов и каталогов.
Например:
Курс молодого бойца. Основы управления доступом к файлам.
Операционная система 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 (суперпользователь), т.к. это потенциальная
угроза безопасности системы.
Источник: 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:
Links2 является консольным браузером, по этому он работает без какой-либо графической оболочки.
Браузер умеет загружать картинки.
Links2 умеет добавлять WEB-страницу в закладки.
Встроенный менеджер закачек.
Корректно работает с сайтами, использующих frame.
Links2 умеет обрабатывать JavaScript код на WEB-странице.
Поддерживается работа через proxy.
Есть возможность просмотра HTML-кода страницы..
Есть версии для ОС: Windows, Linux и Unix.
Ведется история посещенных сайтов.
Составление "БАН"-листа ненужных изображений.
Слабые стороны Links2:
Не поддерживается CSS. Сайты выводятся сплошным HTML-потоком.
запуск -> 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
Ещё подробностей можно прочитать в официальном FAQconky или, пользуясь своими знаниями английского, догадаться :-)
Это всё довольно просто - главное развлечение начинается при настройке переменных, которые и будут отображаться. Лучше всего за основу взять какой-нибудь образцовый конфиг отсюда и брать понравившиеся элементы. В этой замечательной статье (на русском!) есть много интересных идей - только читать её нужно с конца (пропуская философские отвлечения).
Короче говоря: вторая часть конфига выглядит примерно так
Назначение переменных в основном понятно из их названий:
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 configurationbackground yes# Use Xft?use_xft yes# Xft font when Xft is enabledxftfont Bitstream Vera Sans Mono:size=9# Text alpha when using Xftxftalpha 0.8# Update interval in secondsupdate_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 overrideown_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 areaminimum_size 300 5# Draw shades?draw_shades yes# Draw outlines?draw_outline no# Draw borders around textdraw_borders no# Draw borders around graphsdraw_graph_borders no# Stippled borders?stippled_borders 8# border marginsborder_margin 40# border widthborder_width 1# Default colors and also border colorsdefault_color whitedefault_shade_color blackdefault_outline_color black# Text alignment, other possible values are commented#alignment top_left#alignment top_right#alignment bottom_leftalignment bottom_right#alignment none# Gap between borders of screen and text# same thing as passing -x at command linegap_x 12gap_y 12# Subtract file system buffers from used memory?no_buffers yes# set to yes if you want all text to be in uppercaseuppercase no# number of cpu samples to average# set to 1 to disable averagingcpu_avg_samples 2# number of net samples to average# set to 1 to disable averagingnet_avg_samples 2# Force UTF8? note that UTF8 support required XFToverride_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 screenTEXT$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