Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: OpenBox  (Прочитано 10971 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mahinist

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 3271
  • Ubuntu-18.04 , Archlinux , BlackArch , Gentoo
    • Просмотр профиля
Re: OpenBox
« Ответ #30 : 25 Ноябрь 2012, 16:47:28 »
Самый правильный способ - установить систему с netinstall и собрать свое окружение на основе openbox.

Кто не хочет ковыряться - тем подойдет готовый вариант Lubuntu.
А если уже установлена Ubuntu 12.04 , и типа гнома классик , дополнительно установить  openbox  , как такой вариант ?
31-регион

Оффлайн Kernel ops

  • Старожил
  • *
  • Сообщений: 1389
    • Просмотр профиля
Re: OpenBox
« Ответ #31 : 25 Ноябрь 2012, 17:46:39 »
Пользователь,
в сл. раз постараюсь переделать, но меня смущает вот это:
Цитировать
3. Настроить программы.

------------------------
Примечание:
А ниже уже более подробно расписать.
Настройку надо сразу подробно расписывать
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #32 : 30 Декабрь 2012, 22:53:40 »
Посмотрел в рунте какими командами система выключается, перезагружается и т.д.
В этом случае нет лишних действий с правами

logout
openbox --exitreboot
dbus-send --system --print-reply  --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager  org.freedesktop.ConsoleKit.Manager.Restartshutdown
dbus-send --system --print-reply  --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager  org.freedesktop.ConsoleKit.Manager.Stophibernate
dbus-send --system --print-reply  --dest=org.freedesktop.UPower /org/freedesktop/UPower  org.freedesktop.UPower.Hibernatesuspend
dbus-send --system --print-reply  --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Suspend       
« Последнее редактирование: 30 Декабрь 2012, 23:24:46 от Пользователь »

Оффлайн Kernel ops

  • Старожил
  • *
  • Сообщений: 1389
    • Просмотр профиля
Re: OpenBox
« Ответ #33 : 31 Декабрь 2012, 00:42:46 »
Все никак руки не дойдут
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #34 : 03 Февраль 2013, 14:45:09 »
Еще думаю, что хоть устанавливать на Ubuntu его просто, но в этом случае половина убунтовских программ останется в автозапуске (они будут работать и расходовать ресурсы, хоть их не будет видно).

Лучше делать из какого-либо мини орбраза системы, в котором еще окружение не установлено, тогда система будет меньше расходовать ресурсы и следовательно будет быстрее реагировать на нажатия пользователя.

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #35 : 09 Февраль 2013, 14:20:39 »
На рабочем столе можно сделать разнные виды меню:
меню файлового менеджера
составленое вручную меню опенбокса
pipe-menu
debian-menu (menu)
openbox-xdgmenu
apwall

Оффлайн Kernel ops

  • Старожил
  • *
  • Сообщений: 1389
    • Просмотр профиля
Re: OpenBox
« Ответ #36 : 10 Февраль 2013, 15:28:56 »
Пользователь,
с выключением fixed. на счет меню - надо как в arch wiki создавать отдельные статьи для каждого пакета. в ближайшее время постараюсь добавить отдельную инструкцию по установке с mini iso со скриншотами и куртизанками. может быть ее вынести в отдельную статью?
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #37 : 10 Февраль 2013, 23:00:03 »
В рунете была такая статья в блоге Абикулова Антона.
Блог уже не существует, но я успел сохранить информацию  :)

Цитировать
Настройка Openbox

Кто отказался от излишеств,тот избавился от лишений."

И. Кант

    Итак, встречайте, Openbox. Легкий, чрезвычайно минималистичный оконный менеджер для X Window System. Ранее базировался на коде Blackbox-а, но начиная с версии 3.0 был полностью переписал на язык «с» и больше не содержит кусков кода blackbox. Сделаю небольшое отступление и скажу, что знающий толк в программировании человек на этом моменте отметит, что язык «с» отличается «шустростью» приложений, написанных на нем. Openbox3 использует libxft, более ранние его версии были написаны на c++ и использовали только x11 библиотеки.

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

    Страница на википедии http://ru.wikipedia.org/wiki/Openbox
    Официальный сайт http://openbox.org/
    Для арчеводов страничка на archwiki https://wiki.archlinux.org/index.php/Openbox_(Русский)

    Теперь о конфигурационных файлах. Это 2 xml файла rc.xml, menu.xml, которые должны располагаться в каталоге ~/.config/openbox. Есть также общие для всех пользователей настройки в таких же файлах в директории /etc/xdg/openbox.

    Для автоматизации настройки существуют графические утилиты

ObConf — для конфигурации основных настроек openbox-а


 
ObMenu - для настройки меню



ObApps - для настройки поведения отдельных приложений


 
    Лично мое мнение- obmenu неплохая вещь, хоть и встретил пару багов. ObApps не использовал и в своей конфигурации не устанавливал специфических настроек для отдельных приложений. obconf не сильно помогает, лучше запастись своим любимым текстовым редактором и патчить чистый XML, тем более что одно из свойств этого формата - «human usable». Для тех, кто в танке и не знает что такое XML - милости прошу вот сюда

http://xml.nsu.ru/xml/xml_home.xml
    Ну, или, для начала, на родную википедию, т.к. не так уж и много знаний этого формата надо для того, чтобы редактировать конфигурационный файл.

http://ru.wikipedia.org/wiki/XML
Об автостарте приложений в openbox.

    Для этого нужно создать файл autostart.sh в директории ~/.config/openbox и при запуске открывать сессию openbox. То есть пишем в ~/.xinitrc

    exec openbox-session

Обои в openbox.

    Как уже отмечалось, этот оконный менеджер чрезвычайно минималистичен. Стандартного средства установки обоев нет. Но для этого можно воспользоваться, например, утилитой feh.

Вот так выглядит мой autostart.sh

feh --bg-scale /home/tony/.config/openbox/background.jpg
pypanel &
sleep 0.3 && conky -c ~/.config/conky/.conkyrc1 &
sleep 0.3 && conky -c ~/.config/conky/.conkyrc2 &

    Первой строчкой я натягиваю обоину, второй запускаю pypanel, далее после задержек стартую 2 системных монитора conky.

Редактирование основного конфигурационного файла rc.xml

    Итак, перейдем непосредственно к делу. Открываем rc.xml и смотрим что в нем находится.
Первое что бросается в глаза — хорошая документированность настроечного файла. В принципе, всю необходимую информацию можно получить из англоязычных комментариев но я распишу куски немного более подробно.

    <resistance>
       <strength>10</strength>
       <screen_edge_strength>20</screen_edge_strength>
    </resistance>

1. Между тегами strength указывается расстояние в пикселах, необходимое для наложения окон.
2. Между тегами screen_edge_strength то же самое, только между окном и углом экрана.

    <focus>
      <focusNew>yes</focusNew>
      <followMouse>no</followMouse>
      <focusLast>yes</focusLast>
      <underMouse>no</underMouse>
      <focusDelay>200</focusDelay>
      <raiseOnFocus>no</raiseOnFocus>
    </focus>

1. Если focusNew установлено в yes, openbox будет переводить фокус на новое окно при его создании.
2. Если focusLast установлено в yes, при перемещении между рабочими столами фокус будет получать то окно, которое ранее имело фокус.
3. Если followMouse установлено в yes, то фокус будет следовать за мышью. При перемещении мыши фокус будет получать то окно, которое находится под мышью.
4. Тег focusDelay устанавливает задержку перед переводом фокуса на окно под курсором мыши если underMouse установлен в yes.
5. Если underMouse установлен в yes фокус будет получать окно, находящееся под мышью не только при перемещении курсора, но и в другиз случаях. Действует только если установлено followMouse.
6. raiseOnFocus располагает окно, имеющее фокус поверх всех других.

    <placement>
      <policy>Smart</policy>
      <center>yes</center>
      <monitor>Any</monitor>
      <primaryMonitor>1</primaryMonitor>
    </placement>

1. Значение policy может быть Smart или UnderMouse. При Smart положение для окна будет автоматически выбираться openbox-ом, при UnderMouse окна будут позиционироваться под курсором мыши.
2. Если значение center установлен в yes, то окна будут располагаться в центре, при no в левом верхнем углу.
3. Значение monitor используется для системы из нескольких мониторов и отвечает за то, где располагать окно. Any — на любом мониторе, Mouse — где находится указатель мыши, Active — где находится активное окно. Имеет действие только если policy установлено в Smart.
4. primaryMonitor устанавливает монитор, где будут появляться всплывающие окна. Значением может быть индекс начиная с 1 либо
    Active — где находится активное окно
    Mouse — где располагается указатель мыши.

    <theme>
      <name>Clearlooks</name>
      <titleLayout>LSIMC</titleLayout>
      <keepBorder>yes</keepBorder>
      <animateIconify>no</animateIconify>
      <font place="ActiveWindow">
        <name>sans</name>
        <size>10</size>
        <weight>bold</weight>
        <slant>normal</slant>
      </font>
      <font place="InactiveWindow">
        <name>sans</name>
        <size>10</size>
        <weight>bold</weight>
        <slant>normal</slant>
      </font>
      <font place="MenuHeader">
        <name>sans</name>
        <size>10</size>
        <weight>normal</weight>
        <slant>normal</slant>
      </font>
      <font place="MenuItem">
        <name>sans</name>
        <size>10</size>
        <weight>normal</weight>
        <slant>normal</slant>
      </font>
      <font place="OnScreenDisplay">
        <name>sans</name>
        <size>10</size>
        <weight>normal</weight>
        <slant>normal</slant>
      </font>
    </theme>

1. Ну, тег theme, думаю, не нуждается в комментарии. Кстати, если есть желание установить не дефолтную тему, то ее нужно установить в каталог ~/.themes. Но лично мне нравится ненавязчивая ClearLooks и я ей полностью доволен.

        Желающие найти более интересную тему, вам сюда
    box-look.org
    customize.org/browse/tags/openbox
2. Поподробнее остановлюсь на значении titleLayout. Он отвечает за то, как будет выглядеть шапка окон. Каждому отображаемому элементу на ней соответствует своя буква. Доступны следующие:
    N: Иконка окна
    L: Заголовок окна.
    I: Кнопка минимизации
    M: Кнопка разворачивания на весь экран
    C: Кнопка закрытия
    S: Кнопка режима экранирования
    D: Кнопка размещения окна на всех виртуальных мониторах
3. keepBorder указывает на то, должны ли окна отрисовывать границу если декорации окна выключены.
4. AnimateIconify устанавливает анимационную минимизацию окна.
    Следующие 5 xml узлов с названием font устанавливают соответствующие шрифты для
    активного окна
    неактивного окна
    заголовка меню
    элемента меню
    системных сообщения

    Тут все прозрачно.
    Name — имя шрифта
    Size — размер шрифта
    Weight — вес шрифта,жирный(bold) или обычный(normal).
    Slant — наклон шрифта. Обычный шрифт(normal) или наклонный(italic)

    Следующая секция — виртуальные экраны(desktops)

    <desktops>
      <number>4</number>
      <firstdesk>1</firstdesk>
      <names>
        <name>Рабочий стол 1</name>
        <name>Рабочий стол 2 </name>
        <name>Рабочий стол 3</name>
        <name>Рабочий стол 4</name>
      </names>
      <popupTime>1000</popupTime>
    </desktops>

    По-моему, все и так понятно. Здесь задаем их количество, какой из них устанавливать активным при загрузке, имена экранов и время задержки в миллисекундах при переключении между таковыми.

    <resize>
      <drawContents>yes</drawContents>
      <popupShow>Never</popupShow>
      <popupPosition>Center</popupPosition>
      <popupFixedPosition>
        <x>10</x>
        <y>10</y>
      </popupFixedPosition>
    </resize>

    drawContents — изменение размера программы при изменении размера окна.
    PopupShow определяет когда показывать всплывающее окно перемещения/изменения размера окна.
    Варианты:
    Always — всегда показывать
    Never — никогда не показывать
    Nonpixel — показывать только тогда, когда окна изменяются с шагом больше одного пиксела.
    Ну и, собсно, позиция этого всплывающего окошка. Center, Top или Fixed. Если указан параметр Fixed, то в popupFixedPosition указываем желаемую позицию

    <margins>
      <top>0</top>
      <bottom>0</bottom>
      <left>0</left>
      <right>0</right>
    </margins>

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

    <dock>
      <position>TopLeft</position>
      <floatingX>0</floatingX>
      <floatingY>0</floatingY>
      <noStrut>no</noStrut>
      <stacking>Above</stacking>
      <direction>Vertical</direction>
      <autoHide>no</autoHide>
      <hideDelay>300</hideDelay>
      <showDelay>300</showDelay>
      <moveButton>Middle</moveButton>
    </dock>

Dock - место для запуска dock-приложений(в англоязычной литературе doсk-applications). Можно сказать, что это нечто типа подложки для них. Отображается dock только при запуске соответсвующих приложений.

    Position — позиция dock. Варианты:
    Top — вверху
    Bottom — внизу
    Right — справа
    Left - слева
    TopLeft — в левом верхнем углу
    TopRight — в правом верхнем углу
    BottomLeft — в левом нижнем углу
    BottomRight — в правом нижнем углу
    Или если указано Floating то позицию определяем сами через параметры floatingX и floatingY.
    NoStrut Если установлено в yes то окна смогут отрисовываться поверх Dock-приложений.
    Stacking На какой уровень окон помещать dock. Варианты:
    Above — над всеми окнами
    Normal — как обычное окно
    Below — под всеми окнами
    direction указывает, в каком направлении Dock должнен быть расположен — в
    Vertical-вертикальном,
    Horizontal — горизонтальном
    autoHide — скрывать или нет dock когда курсор мыши не наведен на нее.
    HideDelay и ShowDelay определяют время в миллисекундах для скрытия и отбражения dock при перемещении указателя мыши с нее или на нее.
    MoveButton определяет какую клавишу мыши применять для перемещения Dock-приложений вокруг dock.

    Следующий блог конфигурации отвечает за поведение клавиатуры. Здесь определяем горячие клавиши и соответствующие им действия. Эта секция конфигурации тематически разделена на следующие блоки:

    Горячие клавиши для переключения между виртуальными экранами
    Горячие клавиши для поведения окон
    Горячие клавиши для переключения между окнами
    Горячие клавиши для запуска приложений

    Особенность моей настройки openbox в том, что большинство действий я выполняю по горячим клавишам. Да и возить пальцами по тачпаду на моем нетбуке не очень удобно, а носить с собой USB-мышку тем более. В этом блоке я убрал лишние сочетания клавиш, оставил только то, что действительно использую и назначил hotkey-и для наиблее часто используемых приложений.

    <keybind key="C-F1">
      <action name="Desktop">
        <desktop>1</desktop>
      </action>
    </keybind>

    Ничего сложного в настройке таковых клавиш нет, просто вместо Alt надо писать A, вместо Control С, вместо Shift S.

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

    Для начала получим код интересующей нас клавиши. Для этого запускаем программу xev.

    >xev

    Затем нажимаем интересующую нас клавишу и в "keycode" получаем код клавиши.



    Переводим его в шестнадцатеричную систему счисления и пишем примерно такой keybind

    <keybind key="0x7A">
      <action name="Execute">
        <command>ваша_команда</command>
      </action>
    </keybind>

    Например, я на своем MSI Wind U100 назначил на "родные" клавиши регулировки звука соответствующие действия вот так

    <keybind key="0x7A">
      <action name="Execute">
        <command>amixer sset Master 3-</command>
      </action>
    </keybind>
    <keybind key="0x7B">
      <action name="Execute">
        <command>amixer sset Master 3+</command>
      </action>
    </keybind>

Следующий блок — поведение мыши.

    <mouse>
      <dragthreshold>8</dragthreshold>
      <doubleclicktime>200</doubleclicktime>
      <screenedgewarptime>400</screenedgewarptime>
    </mouse>

    dragThreshold — на сколько пикселов необходимо перетащить окно чтобы это считалось операцией перетаскивания
    doubleClickTime — время между двумя кликами мыши для определения того, был ли произведен двойной щелчек.
    ScreenEdgeWarpTime — время в миллисекундах между переключением рабочего стола при перетаскивании окна когда его край выходит за границы экрана.

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

    Следующий блок посвящен меню, вызываемому по правой кнопке мыши(по умолчанию, переделать это, естественно, не воспрещается).

    <menu>
      <file>menu.xml</file>
      <hidedelay>200</hidedelay>
      <middle>no</middle>
      <submenushowdelay>100</submenushowdelay>
      <submenuhidedelay>400</submenuhidedelay>
      <applicationicons>yes</applicationicons>
      <managedesktops>yes</managedesktops>
    </menu>

    file — имя файла с настройками меню
    hideDelay — время в миллисекундах, которое необходимо удерживать кнопку мыши для того, чтобы меню автоматически исчезло при ее отпускании.
    Middle — позиция меню сцентрирована по вертикали вместо того, чтобы быть привязанной к центру.
    SubmenuShowDelay, submenuHideDelay устанавливают задержки в миллисекундах при перемещении по элементам подменю.
    ApplicationIcons — показывать или нет иконки.
    ManageDesktops — показывать или нет кнопки управления виртуальными рабочими столами в меню.

    Далее идет блок управления поведением конкретных приложений.
Для их установки внутри блока applications пишем тег

    <application name=""> </application>

и описываем настройки.

Доступные параметры:

    decor — отображать или нет декорации окна(обрамление, загголовок и т.д.)
    shade — затеняется ли окно когда оно отображается или нет
    position force — принудительное задание позиции окна
    focus — получает ли окно фокус при старте
    desktop — номер рабочего стола, на котором приложение запускается.
    Monitor — номер физического монитора, на котором приложение запускается.
    Layer — слой в котором приложение запускается. Допустимые значения:
    Top, Normal, Bottom
    fulScreen — должно ли приложение быть запущено на полный экран.
    Maximized — тип максимизации. Допустимые значения: Horizontal, Vertical
    iconic — минимизировать окно при появлении или нет
    skip_taskbar и skip_pager отменяют отображение в панелях задач и pager-ах

    Вот и весь этот ужасный, длинный конфиг. Страшно? Нет! Зато теперь мы имеем очень тонко сконфигурированное под себя окружение и, что немаловажно, не имеем практически ничего лишнего.

    Ну и теперь о menu.xml
Как я уже упоминал, здесь удобно испольовать гуевое приложение obmenu.
Можно, конечно, писать его вручную, но имхо здесь разумно пользоваться специальным конфигуратором. По-моему, это разумная экономия времени.

« Последнее редактирование: 10 Февраль 2013, 23:06:49 от Пользователь »

Оффлайн Kernel ops

  • Старожил
  • *
  • Сообщений: 1389
    • Просмотр профиля
Re: OpenBox
« Ответ #38 : 11 Февраль 2013, 15:32:48 »
заодно допишу парочку абзацев из этой статьи в вики
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #39 : 29 Апрель 2013, 22:21:10 »
Нашел диалог выключения на питоне

Сначала нужно создать текстовый файл /usr/bin/oblogout

Вставить в него текст

#!/usr/bin/env python
 
import pygtk
pygtk.require('2.0')
import gtk
import os
import getpass
 
class cb_exit:
    def disable_buttons(self):
        self.cancel.set_sensitive(False)
        self.logout.set_sensitive(False)
        self.suspend.set_sensitive(False)
        self.reboot.set_sensitive(False)
        self.shutdown.set_sensitive(False)
 
    def cancel_action(self,btn):
        self.disable_buttons()
        gtk.main_quit()
 
    def logout_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Exiting Openbox, please standby...")
        os.system("openbox --exit")
 
    def suspend_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Suspending, please standby...")
        os.system("cb-lock")
        os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.UPower\" /org/freedesktop/UPower org.freedesktop.UPower.Suspend")
        gtk.main_quit()
 
    def reboot_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Rebooting, please standby...")
        os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart")
 
    def shutdown_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Shutting down, please standby...")
        os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop")
 
    def create_window(self):
        self.window = gtk.Window()
        title = "Log out " + getpass.getuser() + "? Choose an option:"
        self.window.set_title(title)
        self.window.set_border_width(5)
        self.window.set_size_request(500, 80)
        self.window.set_resizable(False)
        self.window.set_keep_above(True)
        self.window.stick
        self.window.set_position(1)
        self.window.connect("delete_event", gtk.main_quit)
        windowicon = self.window.render_icon(gtk.STOCK_QUIT, gtk.ICON_SIZE_MENU)
        self.window.set_icon(windowicon)
 
         
        #Create HBox for buttons
        self.button_box = gtk.HBox()
        self.button_box.show()
         
        #Cancel button
        self.cancel = gtk.Button(stock = gtk.STOCK_CANCEL)
        self.cancel.set_border_width(4)
        self.cancel.connect("clicked", self.cancel_action)
        self.button_box.pack_start(self.cancel)
        self.cancel.show()
         
        #Logout button
        self.logout = gtk.Button("_Log out")
        self.logout.set_border_width(4)
        self.logout.connect("clicked", self.logout_action)
        self.button_box.pack_start(self.logout)
        self.logout.show()
         
        #Suspend button
        self.suspend = gtk.Button("_Suspend")
        self.suspend.set_border_width(4)
        self.suspend.connect("clicked", self.suspend_action)
        self.button_box.pack_start(self.suspend)
        self.suspend.show()
         
        #Reboot button
        self.reboot = gtk.Button("_Reboot")
        self.reboot.set_border_width(4)
        self.reboot.connect("clicked", self.reboot_action)
        self.button_box.pack_start(self.reboot)
        self.reboot.show()
         
        #Shutdown button
        self.shutdown = gtk.Button("_Power off")
        self.shutdown.set_border_width(4)
        self.shutdown.connect("clicked", self.shutdown_action)
        self.button_box.pack_start(self.shutdown)
        self.shutdown.show()
         
        #Create HBox for status label
        self.label_box = gtk.HBox()
        self.label_box.show()
        self.status = gtk.Label()
        self.status.show()
        self.label_box.pack_start(self.status)
         
        #Create VBox and pack the above HBox's
        self.vbox = gtk.VBox()
        self.vbox.pack_start(self.button_box)
        self.vbox.pack_start(self.label_box)
        self.vbox.show()
         
        self.window.add(self.vbox)
        self.window.show()
         
    def __init__(self):
        self.create_window()
 
 
def main():
    gtk.main()
 
if __name__ == "__main__":
    go = cb_exit()
    main()

Сохранить и закрыть, в свойствах разрешить исполнение.



Оффлайн Виктор Перестукин

  • Старожил
  • *
  • Сообщений: 2158
    • Просмотр профиля
Re: OpenBox
« Ответ #40 : 09 Май 2013, 20:17:06 »

Оффлайн v!tax

  • Старожил
  • *
  • Сообщений: 4157
  • Gentoo x64 bspwm
    • Просмотр профиля
Re: OpenBox
« Ответ #41 : 15 Май 2013, 00:27:38 »
Нашел диалог выключения на питоне

Сначала нужно создать текстовый файл /usr/bin/oblogout

Вставить в него текст

#!/usr/bin/env python
 
import pygtk
pygtk.require('2.0')
import gtk
import os
import getpass
 
class cb_exit:
    def disable_buttons(self):
        self.cancel.set_sensitive(False)
        self.logout.set_sensitive(False)
        self.suspend.set_sensitive(False)
        self.reboot.set_sensitive(False)
        self.shutdown.set_sensitive(False)
 
    def cancel_action(self,btn):
        self.disable_buttons()
        gtk.main_quit()
 
    def logout_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Exiting Openbox, please standby...")
        os.system("openbox --exit")
 
    def suspend_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Suspending, please standby...")
        os.system("cb-lock")
        os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.UPower\" /org/freedesktop/UPower org.freedesktop.UPower.Suspend")
        gtk.main_quit()
 
    def reboot_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Rebooting, please standby...")
        os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart")
 
    def shutdown_action(self,btn):
        self.disable_buttons()
        self.status.set_label("Shutting down, please standby...")
        os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop")
 
    def create_window(self):
        self.window = gtk.Window()
        title = "Log out " + getpass.getuser() + "? Choose an option:"
        self.window.set_title(title)
        self.window.set_border_width(5)
        self.window.set_size_request(500, 80)
        self.window.set_resizable(False)
        self.window.set_keep_above(True)
        self.window.stick
        self.window.set_position(1)
        self.window.connect("delete_event", gtk.main_quit)
        windowicon = self.window.render_icon(gtk.STOCK_QUIT, gtk.ICON_SIZE_MENU)
        self.window.set_icon(windowicon)
 
         
        #Create HBox for buttons
        self.button_box = gtk.HBox()
        self.button_box.show()
         
        #Cancel button
        self.cancel = gtk.Button(stock = gtk.STOCK_CANCEL)
        self.cancel.set_border_width(4)
        self.cancel.connect("clicked", self.cancel_action)
        self.button_box.pack_start(self.cancel)
        self.cancel.show()
         
        #Logout button
        self.logout = gtk.Button("_Log out")
        self.logout.set_border_width(4)
        self.logout.connect("clicked", self.logout_action)
        self.button_box.pack_start(self.logout)
        self.logout.show()
         
        #Suspend button
        self.suspend = gtk.Button("_Suspend")
        self.suspend.set_border_width(4)
        self.suspend.connect("clicked", self.suspend_action)
        self.button_box.pack_start(self.suspend)
        self.suspend.show()
         
        #Reboot button
        self.reboot = gtk.Button("_Reboot")
        self.reboot.set_border_width(4)
        self.reboot.connect("clicked", self.reboot_action)
        self.button_box.pack_start(self.reboot)
        self.reboot.show()
         
        #Shutdown button
        self.shutdown = gtk.Button("_Power off")
        self.shutdown.set_border_width(4)
        self.shutdown.connect("clicked", self.shutdown_action)
        self.button_box.pack_start(self.shutdown)
        self.shutdown.show()
         
        #Create HBox for status label
        self.label_box = gtk.HBox()
        self.label_box.show()
        self.status = gtk.Label()
        self.status.show()
        self.label_box.pack_start(self.status)
         
        #Create VBox and pack the above HBox's
        self.vbox = gtk.VBox()
        self.vbox.pack_start(self.button_box)
        self.vbox.pack_start(self.label_box)
        self.vbox.show()
         
        self.window.add(self.vbox)
        self.window.show()
         
    def __init__(self):
        self.create_window()
 
 
def main():
    gtk.main()
 
if __name__ == "__main__":
    go = cb_exit()
    main()

Сохранить и закрыть, в свойствах разрешить исполнение.



можно и без oblogout.вынести в pop-up меню.прописать,что надо в menu.xml
господь ведет твою руку, сын мой....

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #42 : 15 Май 2013, 01:30:31 »
Ну это само собой, стандартный метод для опенбокса.

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

Оффлайн v!tax

  • Старожил
  • *
  • Сообщений: 4157
  • Gentoo x64 bspwm
    • Просмотр профиля
Re: OpenBox
« Ответ #43 : 15 Май 2013, 01:32:29 »
еще с помощью gxmessage
господь ведет твою руку, сын мой....

Оффлайн Пользователь

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2456
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: OpenBox
« Ответ #44 : 15 Май 2013, 01:37:10 »
gxmessage упомянут в статье вики, которую мы тут обсуждаем.

 

Страница сгенерирована за 0.126 секунд. Запросов: 25.