Desktop

Contents


Что такое WM, DE и чем они отличаются? Что лучше?

Сервер X11 (X.org в большинстве современных дистрибутивов) обладает достаточно богатой функциональностью, в которую входит отрисовка окон друг поверх друга, работа с буфером обмена, передача сеанса работы по сети, работа с железом вроде мыши, клавиатуры и видеоподсистемы компьютера и многое другое. Однако, двигать окна, отрисовывать вокруг них рамку с кнопочками, сворачивать и разворачивать окна он без посторонней помощи не умеет, этим занимается сторонняя программа, называемая менеджером окон.

WM (Window Manager, Оконный менеджер) - это программа, которая управляет окнами в различных графических системах, типа X11. В её задачи входит (всё опционально) отрисовка рамок вокруг окон, кнопок закрытия/сворачивания окон, поддержание окон поверх других, управление политикой передачи фокуса, управление рабочими столами и многое другое.

Однако менеджером окон также (ошибочно) называют некий набор программ, куда помимо самого WM входит, например, пейджер для переключения виртуальных рабочих столов, место куда сворачиваются окна и где их можно попереключать, выбирая нужное, и системный лоток (трей), где висят значки постоянно запущенных приложений. К числу таких "менеджеров окон" можно отнести FluxBox (да любой *box), IceWM, Window Maker, FVWM, AfterStep, ion, twm и прочие.

Одним из наиболее продвинутых оконных менеджеров на данный момент является окнонный менеджер среды KDE - KWin. Он предоставляет пользователю богатейший список настроек, куда входит всё и даже больше.

Если Вы хотите детально разобраться, как должен работать WM, то исследуйте спецификацию, доступную здесь, а также микроскопический по размерам WM karmen

Если менеджер окон дополнить некоторым набором стандартных программ, выполненных в едином стиле (за счёт использования одного итого же набора базовых библиотек и наличия общих руководств по стилю программ, HIG) и реализующих большую часть базовой функциональности, нужной простому пользователю от компьютера (посидеть в интернете, набрать текст, нарисовать картинку, послушать музыку и посмотреть кино, и т.д.), то мы получим рабочую среду (Desktop Environment, Рабочее окружение). К этой группе относятся KDE и Gnome с XFCE. Кроме того, основные рабочие среды позволяют менять настройки системы через графический интерфейс. В принципе, единственные отличия DE от "менеджера окон" - это размер, количество написанных под данную среду программ, и объем предоставляемого пользователю функционала.

Как поменять разрешение, не перезапуская X-сервер?

Запустите xrandr, он выдаст нечто вроде:

$ xrandr 
 SZ:    Pixels          Physical       Refresh
*0   1440 x 900    ( 381mm x 238mm )  *60  
 1   1024 x 768    ( 381mm x 238mm )   85  
 2    800 x 600    ( 381mm x 238mm )   85  
 3    640 x 480    ( 381mm x 238mm )   85  
Current rotation - normal
Current reflection - none
Rotations possible - normal left inverted right 
Reflections possible - none

Теперь напишете, например, xrandr 2 и вы получите разрешение 1024x768. Так же с помощь xrandr можно узнать текущее разрешение экрана и частоту развертки

Чем/как отрегулировать яркость в LCD дисплеях Apple Cinema Display?

http://acdcontrol.sourceforge.net

Как в KDE переключать раскладки клавиатуры по Ctrl+Shift?

Этот вопрос долго будоражил умы ЛОРовцев, но в итоге решение было найдено :)

http://wiki.linux.ru/index.php/FAQ:kxkb

Какие файлы отвечают за внешний вид (шрифт, тема, стиль...) GTK приложений? Дайте пример такого файла

Это файлы gtkrc. Существуют глобальные настройки и локальные. Локальные хранятся в домашней папке, в файле ~/.gtkrc-2.0, глобальные в /etc/gtk-2.0/gtkrc.

gtk-theme-name = "Clearlooks"
gtk-font-name = "Tahoma 8"
gtk-icon-theme-name = "Tango"

style "user-font"
{
	font_name="Tahoma 8"
}

widget_class "*" style "user-font"

Как поменять в gnome местами кнопки OK и Cancel?

В ~/.gtkrc-2.0 прописать gtk-alternative-button-order=1

Как настроить список программ в меню Gnome?

Используйте Alacarte - http://ftp.gnome.org/pub/GNOME/sources/alacarte/

Как поменять внешний вид курсоров мыши?

Распаковываем тему с курсорами в ~/.icons или /usr/share/icons, а в ~/.Xdefaults добавляем строчку Xcursor.theme: your_theme_name и перезапускаем X-сервер

Как подружить UTF-8 и gtk 1.x?

http://wiki.fantoo.ru/index.php/HOWTO_GTK1_with_UTF8

Как заставить работать Emacs 22.x с русским языком в utf-8?

Об этом рассказывается здесь: http://ru.gentoo-wiki.com/HOWTO_Emacs_%D0%B8_utf8 Можно добавить, что потребуется перезагрузка X-сервера, чтобы вступили в действие изменения в ~/.Xresources

Как ускорить проигрывание FLASH (заставить его использовать меньше ресурсов)?

export FLASH_GTK_LIBRARY=libgtk-x11-2.0.so.0

Добавьте эту команду в ~/.bash_profile или /etc/profile

Как изменить шрифты/цвета в интерфейсе Mozilla? Где почитать о том, как настроить Mozilla под себя?

Настройки шрифтов и цвета хранятся в файле ~/.mozilla/default/*/chrome/userChrome.css. Если его там нет, то создайте вручную. Вот пример настройки шрифтов:

/* UI fonts */
* {
font-size: 8pt !important;
font-family: Tahoma !important;
}

menubar {
font-weight: bold !important;
}

Более подробно об этом рассказано тут

Как установить тему для Firefox, не скачивая ее заново из интернета?

Переименовать .jar в .xpi и открыть простым File -> Open File, либо открыть Tools -> Themes и перетащить туда файл с темой мышклй. Если ничего не помогло, то воспользоваться скриптом - http://www.eightlines.com/neil/mozskin/installjar.html

Как сделать так, чтобы браузеры показывали видео (wmv, google video) на страничках?

Нужно поставить соответствующий плагин для Mplayer. Лежит он здесь

Как подключить вебкамеру и настроить skype? (На примере камеры Logitech и драйвера gspca)

Для начала воткнем камеру в компьютер и посмотрим на вывод команды lsusb. Мы должны увидеть что-то вроде такого:

[jackill@mobile ~]$ /sbin/lsusb
Bus 001 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 004: ID 046d:092f Logitech, Inc. QuickCam Express Plus
Bus 002 Device 001: ID 0000:0000

Узнаем, чем поддерживается камера, воспользовавшись поисковиком. Отыскав сайт QuickCam Team, мы убедимся, что все в порядке.

Теперь нам нужно установить модуль ядра (он же драйвер) gspca. Узнайте, как устанавливаются дополнительные модули в вашем дистрибутиве. Для Fedora 8 с подключенным репозиторием livna это делается так:

[jackill@mobile ~]$ sudo yum install kmod-gspca

Должны установиться пакеты kmod-gspca и gspca.

Запускаем skype, заходим в раздел Настройки->Видеоустройства (Settings->Video Devices) и на камере нажимаем кнопку Проверка (Test). Все должно работать.

Skype запускается, но приветственный звук больше похож на дробь, а с микрофона звук не идет

Если вы уже проверили свой микшер, значит, скорее всего skype не работает с вашей звуковой подсистемой (программным микшером, если он установлен). Примером такой системы является pulse audio (работающая, например, в Fedora 8). На момент марта 2008 года skype не умеет с ней работать (также, как и многий другой софт). Ее придется отключить.

В случае работы c голой alsa вполне хватит выставить в skype устройства ввода и вывода по умолчанию (default).

Решение с микрофоном для материнских плат nVidia с кодеком HDA тут

Как изменить яркость изображения с вебкамеры?

Самый простой способ для камер Logitech, сообщенный разработчиками skype.

Меняем вот эти параметры (для начала, как указано ниже):

echo 4 > /sys/module/gspca/parameters/gamma
echo 290 > /sys/module/gspca/parameters/GRed
echo 310 > /sys/module/gspca/parameters/GGreen
echo 315 > /sys/module/gspca/parameters/GBlue

С помощью этих параметров настройте изображение и затем занесите команды в загрузочные скрипты.

Как отключить beep?

Если хочется отключить писк в консоли (для bash и программ, использующих readline), можно добавить в ~/.inputrc строку `set bell-style off`, или `xset -b` (что эквивалентно `xset b off`), затем выйти из нее (консоли) и зайти снова - должно получиться. Или сделать setterm -blength 0.

Для более глубокого ознакомления со способами управления звуком (и не только) в консоли рекомендую посетить http://gazette.linux.ru.net/rus/articles/hobcon.html и [url url="http://linuxdoc.ru/HOWTO/mini/Visual-Bell.html]

В ядрах серии 2.6.х можно просто не собирать поддержку для pc speaker.

Где прочитать про консольные коды?

man console_codes

Как запустить программу в фоне, без привязки к терминалу?

Просто без привязки к конкретной консоли (пользователь остается за машиной):

user@linux$ nohup COMMAND [ARG]...

Программа nohup запускает COMMAND таким образом, что она игнорирует сигнал hangup, что позволяет ей продолжать работу и после выхода из терминала. Также, она перенаправляет весь вывод программы в файл ~/nohup.out и понижает приоритет выполняемой программы.

Запустить ее в screen:

user@linux$ screen -S имя команда [параметры]

Выйти из сеанса можно при помощи сочетания клавиш Ctrl-A Ctrl-D. Подключиться обратно так:

user@linux$ screen -R имя

Очень рекомендуем прочитать man screen (он подробный и хорошо написан).

Также можно "отвязать" от терминала программу, уже запущенную в фоновом режиме в bash, командой disown.

 
user@linux$ xmms http://64.236.34.67:80/stream/2007 & 
user@linux$ disown xmms

Еще можно воспользоваться командами fg, bg, job

Как понизить/повысить приоритет запускаемой программе?

Воспользуйтесь командой nice. Чтобы понизить приоритет, напишите нечто вроде:

user@linux$ nice -n 10 myprogram

Подробности можно узнать, набрав man nice

Как запустить задачу на определенном процессоре в многопроцессорной системе?

Нужны утилиты отсюда, сама утилита называется taskset. Прочитать обо всем можно здесь: http://www.kernel.org/pub/linux/kernel/people/rml/cpu-affinity/README-cpu-affinity

Посмотреть на каком процессоре выполняется задача можно с помощью обычной утилиты top

Как разделить tar.gz на равные части?

man tar в районе -M. Либо man split и натравить split на tar.gz.

Как перевести текстовый файл из одной кодировки в другую?

cat file.txt|iconv -f cp1251 -t koi8r >> file2.txt

Как прочитать файлы с ftp с кодировкой cp1251?

Есть несколько способов (и программ).

Первый: в терминале задаем переменную LANG=ru_RU.CP1251. Запускаем любимый клиент. Файлы будут выглядеть нормально.

Второй: ставим gftp, в свойствах выбираем Параметры -> Набор символов удаленной стороны. Проблема в том, что они придут на машину в "непотребной" кодировке. Существуют патчи - можно почитать об этом здесь.

Третий: запускаем mozilla или konqueror и выбираем кодировку. У konqueror соответствующий пункт появится в меню Tools (Select Remote Charset). Да, если вы перешли с одного сайта, указав там кодировку cp1251, на другой с cp1251, названия файлов на другом будут отображаться некорректно. Лечится просто - выставляете какую-нибудь другую кодировку, затем снова cp1251.

Четвертый: Пользуемся lftp:

lftp :~>set ftp:charset CP1251
lftp :~>open "имя виндового ftp сервера"

Как провести операцию по преобразованию группы графических файлов (например, уменьшить размер ста файлов)?

Есть такой пакет ImageMagick, Входит он практически в любой дистрибутив и содержит группу утилит, предназначенных для различного преобразования файлов. Полный список поддерживаемых форматов вы можете узнать, набрав man ImageMagick.

В качестве примера возьмем задачу по уменьшению группы файлов (jpeg уменьшить пропорционально, чтобы координата x равнялась 800 пикселям):

#!/bin/sh
for i in $@ ; do convert -geometry 800 $i small/$i ; done

Запускать из каталога с картинками, уменьшенные изображения будут в каталоге small, который нужно предварительно создать

Как установить в консоли развертку больше 60Гц при использовании framebuffer?

FIXME: написать о uvesafb

Как изменить разрешение в консоли?

С помощью параметра ядра vga, значения можно узнать тут

Как сделать скриншот с framebuffer?

Программой fbgrab

Как сделать скриншот текстовой консоли (без framebuffer)?

Воспользоваться таким скриптом. Выходной формат - bmp:

#!/usr/bin/perl

$ttynum=shift or die "Usage: grab <vttynum>\n";
die "$ttynum: Incorrect virtual console number\n" unless $ttynum=~/^\d+$/;
$ttydev="/dev/tty" . $ttynum;
$vcsadev="/dev/vcsa" . $ttynum;

open(VCSA, $vcsadev) or die "Cannot open $vcsadev: $!\n";
$len=read(VCSA, $buf, 16384);
close(VCSA);

($height, $width, $curx, $cury)=unpack('C4',$buf);

open(T, $ttydev) or die "Cannot open $ttydev: $!\n";
$fnt=pack('L4096', 0);
$fntx=pack('SSP', 256, 32, $fnt);
ioctl(T, 0x4B6B, $fntx) or die "Cannot grab console font: $!\n";
close(T);

($nchars, $fheight)=unpack('SS', $fntx);

$thickness = ($fheight >= 14 ? 2 : 1);

foreach $c (0..255)
{
    my @tmp;
    my @ch=split(//, substr($fnt, $c*32, $fheight));
    push @tmp, [ split(//, unpack('B8',shift @ch)) ] while @ch;
    push @font,[ @tmp ];
}

print 'BM'.pack('L29',
$width*$height*$fheight*4+118,0,118,40,$width*8,$height*$fheight,0x40001,
0,$width*$height*$fheight*4,0x120b,0x120b,16,16,
0x000000,0x000080,0x008000,0x008080,0x800000,0x800080,0x808000,0xC0C0C0,
0x808080,0x0000FF,0x00FF00,0x00FFFF,0xFF0000,0xFF00FF,0xFFFF00,0xFFFFFF);

for($line=$height-1;$line>=0;--$line)
{
    my @img;
    push @img,[] while (1..$fheight);

    foreach $col (0..$width-1)
    {
        ($fgattr,$bgattr)=
        split(//, unpack('h2', substr($buf, 5+2*($line*$width + $col), 1)));
        $ch=unpack('C', substr($buf,4+2*($line*$width + $col), 1));

        if($line==$cury && $col==$curx)
        {
            foreach $_ (1..$fheight-$thickness)
            {
                push(@{$img[$fheight-$_]},
                  map {$_?$fgattr:$bgattr} @{$font[$ch][$_-1]});
            }

            foreach $_ (0..$thickness-1)
            {
                push @{$img[$_]},($fgattr)x8;
            }
        }
        else
        {
            foreach $_ (1..$fheight)
            {
                push(@{$img[$fheight-$_]},
                map {$_?$fgattr:$bgattr} @{$font[$ch][$_-1]});
            }
        }
    }

    print pack('H'.(8*$width),join('',@$_)) while $_=shift @img;
}

Как записать видео рабочего стола? Как записать сессию vnc?

Запись в avi - http://sourceforge.net/projects/xvidcap

Запись в ogg theora - http://live.gnome.org/Istanbul и http://recordmydesktop.iovar.org. Последний имеет фронтенды на GTK2 и Qt4

Запись VNC - http://www.sodan.org/%7Epenny/vncrec

Хочется сделать OSD-вывод надписей из разных программ, например XMMS...

Есть такая вещь под названием xosd. Для XMMS есть специальный плагин

Чем выводить логи на обои/рабочий стол?

Например, воспользоваться программой root-tail.

Как из истории команд bash убрать мусор, который заносит туда mc?

В файл ~/.bashrc добавьте строку "export HISTCONTROL=ignoreboth" (без кавычек)

Как настроить/улучшить внешний вид приложений, использующих библиотеку Tk?

Небольшой исторический экскурс: Вплоть до версии 8.4 библиотеки Tk для отрисовки шрифтов использовал традицонный способ системы X11. Это выражалось в том, что ни о каком сглаживании шрифтов даже не приходилось и мечтать. Кроме того, существовал баг с подбором шрифтов для кириллицы, в результате чего русскоязычный текст выглядел ужасно, что можно наблюдать на старых скриншотах tkabber-а.

Но с версии Tk 8.5 дело кардинально изменилось. Теперь для отрисовки шрифтов используется библиотека Xft (та же, что и в Qt). То есть можете смело бросать камень в того, кто скажет, что шрифты в Tk страшные :) . Более того, в Tk 8.5 переработаны дефолтные настройки толщины бордюров виджетов, и теперь "из коробки" Tk выглядит немного менее архаично.

Итак, что же надо сделать, чтобы получить красивый внешний вид приложения на Tk:

1. Установить Tk 8.5 или выше и настроить его для использования по умолчанию в приложениях на Tcl/Tk. В Debian/Ubuntu последнее делается с помощью

update-alternatives --config wish
где надо выбрать wish8.5.

2. Использовать для тонкой настройки виджетов механизм ресурсов X.

В отличие от библиотек Qt и GTK, авторы которых изобрели собственные велосипеды для управления конфигурацией, Tk использует стандартный способ настройки внешнего вида: X Resource Database.

База данных ресурсов X11 содержит настройки в следующем формате:

application.component.subcomponent.subcomponent.attribute: value

Путь к опции состоит из имени приложения и пути до конкретного экземпляра виджета, разделённых точками. Допускается использование '*' для подстановки любого набора символов (как в Shell).

Если название элемента списка начинается с маленькой буквы, то под настройку попадает только конкретный виджет с данным именем. Иначе -- весь класс виджетов. Для Tk стандартный набор классов виджетов следующий: Button Checkbutton Radiobutton Label Entry Listbox Menuentry Menu Menubutton Message Scale Text.

Имя атрибута (attribute) должно всегда начинаться с маленькой буквы. Стандартными атрибутами для Tk являются: font, borderWidth и т.д. Подробнее можно посмотреть тут. Из всех написанных там слов нас наиболее интересует Database Name. Полный список опций для конкретного класса виджетов можно посмотреть тут в секции Widgets.

Итак, примеры:

Устанавливаем толщину всех контуров(для кнопок, скроллбаров, полей ввода и т.д.) в 1 пиксел:

*borderWidth: 1

Убираем контур у выпуклой главной менюшки, а контур выпадающих и контекстных меню делаем толщиной в 1 пиксел:

*Menu.borderWidth: 1
*menu.borderWidth: 0

Настраиваем разом все шрифты(Terminus 10):

*font: Terminus 10

Если используется Tk<=8.4, lesstif или другие древние тулкиты, то шрифты для совместимости лучше задавать в иксовом формате. Например:

*font: -*-liberation.sans-medium-r-*-*-11-*-*-*-*-*-*-

Для применения настроек надо полученный файл скормить на вход команде xrdb:

cat options | xrdb -merge

Хорошей идеей будет добавить эту команду в скрипты, выполняющиеся при запуске оконной среды или же поместить конфигурацию непосредственно в ~/.Xresources.

Если используется KDE и поставлена галка "применять цвета к приложениям не из KDE", то при запуске среды некоторые X-ресурсы устанавливаются кедами. И это не всегда хорошо, т.к. там определяется ресурс "*background". Так что это поведение неплохо бы отключить.

Ещё о X Resources и их влиянии на внешний вид приложений можно почитать тут.

3. Для настройки дефолтной темы для библиотеки Ttk/Tile, используйте X-ресурс tkTheme:

*tkTheme: clam

Стандартный набор тем для X11: default(строгая тема), classic(тема в стиле Motif), alt(тема в стиле Window$ 95), clam(гламурная тема с округлыми кнопочками).

Также существуют темы для Tile, использующие виджеты Qt или Gtk.

4. Если сделали всё вышеперечисленное, но шрифты до сих пор страшные (так иногда бывает в убунте), то, увы, придётся редактировать вызываемую программу или добавлять следующий Tcl-скрипт в её конфигурационный файл:

foreach f {TkDefaultFont TkTextFont TkFixedFont TkMenuFont TkHeadingFont 
        TkCaptionFont TkSmallCaptionFont TkIconFont TkTooltipFont} {
    font configure $f -family Terminus -size 10
}

Разумеется, вместо Terminus 10 можно вставить любой шрифт.

Как сделать, чтобы в индикаторе раскладок Gnome отображался флаг страны?

Посмотрите здесь: http://forum.ubuntu.ru/index.php?topic=20729.0