Автор Гілка: swm -- switch wm скриптик.  (Прочитано 2572 раз)

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
swm -- switch wm скриптик.
« : 2005-07-31 19:21:58 »
Привіт.
Якось шукав якусь програмку яка би дозволяла в консолі вибирати віконний менеджер , так нічого й не знайшовши збалабасив швиденько скриптик, який , звичайно, можна вдосконалювати:
#!/bin/sh
# swm (select WM)
# a simple script to modify your ~/.xinitrc before `startx'

WSTEMP=/tmp/wmselect.tmp.$$
XINITRC=~/.xinitrc

if [ ! -a $XINITRC ]; then
      touch $XINITRC
fi

dialog --backtitle "swm -- dialog 0.6z" \
      --title "Window manager selector" --clear \
        --radiolist "Please select a window manager to start.\n\
Selecting an item will modify the .xinitrc file in your\n\
home directory. In case the script fails, you may need\n\
to edit the .xinitrc file manually, by adding a line:\n\
\"exec <your WM of choice>\"   at the end.\n\n\
   So, how do you fill today?" 20 61 7 \
"Blackbox"     "Not beige at least." off \
"Fluxbox"     "I feel very fluxible." on \
"Fvwm"        "More like classically inclined." off \
"Twm"         "Cholesterol free and mean." off \
"Waimea"      "Yes, baby, yes." off \
"WindowMaker" "Next step, please." off \
"Wm2"         "Like an alien superhero." off 2> $WSTEMP
      
cleantemp()
{
      rm -f $WSTEMP
}

startwm() {  
wm=$1
case "$wm" in      
        "Blackbox")
      sed '/exec/d' $XINITRC > $WSTEMP
        echo exec blackbox >> $WSTEMP
      mv $WSTEMP $XINITRC
      cleantemp
      exec startx $XINITRC
;;
        "Fluxbox")
      sed '/exec/d' $XINITRC > $WSTEMP
        echo exec fluxbox >> $WSTEMP
      mv $WSTEMP $XINITRC
      cleantemp
      exec startx $XINITRC
;;
      "Fvwm")
       sed '/exec/d' $XINITRC > $WSTEMP
       echo exec fvwm >> $WSTEMP
       mv $WSTEMP $XINITRC
       cleantemp
       exec startx $XINITRC
;;
      "Twm")
      sed '/exec/d' $XINITRC > $WSTEMP
      echo exec twm >> $WSTEMP
      mv $WSTEMP $XINITRC
      cleantemp
      exec startx $XINITRC
;;
      "Wm2")
      sed '/exec/d' $XINITRC > $WSTEMP
      echo exec wm2 >> $WSTEMP
      mv $WSTEMP $XINITRC
      cleantemp
      exec startx $XINITRC
;;
      "Waimea")
      sed '/exec/d' $XINITRC > $WSTEMP
      echo exec waimea >> $WSTEMP
      mv $WSTEMP $XINITRC
      cleantemp
      exec startx $XINITRC
;;      
        "WindowMaker")
      sed '/exec/d' $XINITRC > $WSTEMP
      echo exec wmaker >> $WSTEMP
      mv $WSTEMP $XINITRC
      cleantemp
      exec startx $XINITRC
;;
esac
}

retval=$?
choice=`cat $WSTEMP`
cleantemp

case $retval in
    0)
          startwm $choice
;;
    1)
;;      # Cancel has been pressed
    255)
;;      # ESC has been pressed
esac
Він використовує dialog програмку, на Лінуксах вона як правило встановлена,
`which dialog' щоби впевнитись.  Добрий він тим що не потрібно запускати xdm, kdm або gdm додаткові демони.  Скрипт редагує ~/.xinitrc перед запуском X-ів. Щоби викреслити якийсь менеджер зі списку, просто закоментуйте його де він впеше з'являється:
 #"Waimea"      "Yes, baby, yes." off \
Можете також добавити Gnome або KDE (я їх не використовую) ... залишаю вам на доробку.
« Змінено: 2005-07-31 21:20:34 від tech »

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: swm -- switch wm скриптик.
« Відповідей #1 : 2005-08-01 22:04:34 »
Невеличка поправка, закоментовувати не можна, це ламає dialog команду і видає помилку, тому краще або взагалі видалити лінію, або поміняти на інший віконний менеджер.
"Pwm"      "Pwm (http://modeemi.fi/~tuomov/pwm)" off \

Раз я вже тут, додам декілька ... зображень, які добре використовувати із Fluxbox, Pwm, 9wm і.т.д. Для мінімалістів:
/* __START kill.xbm */
#define kill_width 14
#define kill_height 15
static unsigned char kill_bits[] = {
  0xff, 0x3f, 0xff, 0x3f, 0x0f, 0x3c, 0x07, 0x38, 0x37, 0x3b, 0x37, 0x3b,
  0xcf, 0x3c, 0x1f, 0x3e, 0x1b, 0x36, 0xf1, 0x23, 0xcf, 0x3c, 0x1d, 0x3a,
  0xf1, 0x23, 0xfb, 0x37, 0xff, 0x3f, };
/* __END__ kill.xbm */
Саме так, для тих хто цього ще не знає, це XBM (X bitmap) зображення, те яке можна відкрити у bitmap програмці. Скопіюйте все між __START__ та __END__ у текстовий файл, збережіть це як kill.xbm (xbm не обов'язкове, але допомагає відтізнити від інших файлів).
Скомандуйте xsetroot -btmap kill.xbm
Xbm формат часто використовують для курсорів в X-ах , так наступні два файлика встановлять нам курсор у вигляді "x" (подібний до дедолтового в Xfree, але кращий):
/* __START__ cu0.xbm */
#define cu0_width 13
#define cu0_height 13
static unsigned char cu0_bits[] = {
   0x00, 0x00, 0x0e, 0x0e, 0x1e, 0x0f, 0xbe, 0x0f, 0xfc, 0x07, 0xf8, 0x03,
   0xf0, 0x01, 0xf8, 0x03, 0xfc, 0x07, 0xbe, 0x0f, 0x1e, 0x0f, 0x0e, 0x0e,
   0x00, 0x00};
/* __END__ cu0.xbm */
/* __START__ cu0m.xbm -- mask file */
#define cu0m_width 13
#define cu0m_height 13
static unsigned char cu0m_bits[] = {
   0x0f, 0x1e, 0x1f, 0x1f, 0xbf, 0x1f, 0xff, 0x1f, 0xfe, 0x0f, 0xfc, 0x07,
   0xf8, 0x03, 0xfc, 0x07, 0xfe, 0x0f, 0xff, 0x1f, 0xbf, 0x1f, 0x1f, 0x1f,
   0x0f, 0x1e};
/* __END__ cu0m.xbm */
Якщо зберегти це як cu0.xbm та cu0m.xbm, потім виконати
xsetroot -cursor cu0.xbm cu0m.xbm
Курсор стане хрестовидним.
   Ще декілька які мені подобаються.
#define x86_width 10
#define x86_height 8
static unsigned char x86_bits[] = {
   0xff, 0x03, 0xff, 0x03, 0xbb, 0x03, 0xd7, 0x03, 0xef, 0x03, 0xd7, 0x03,
   0xbb, 0x03, 0xff, 0x03};
/* __END__ x86.xbm. Command: xsetroot -bitmap x86.xbm */
/* s.xbm ,  "Slackware" */
#define s_width 5
#define s_height 8
static unsigned char s_bits[] = {
   0xff, 0xf3, 0xed, 0xfd, 0xf3, 0xef, 0xed, 0xf3};
/* __END__. Comand xsetroot -bitmap s.xbm */
man xsetroot
man bitmap
 /usr/X11R6/include/X11/bitmaps/
 /usr/X11R6/include/X11/cursorfont.h (курсори по замовчуванню, імена вживаються без XC_: xsetroot -cursor_name pirat)

Ще один цікавий формат, це XPM (X pixmap). Скажімо той самий kill.xbm у XPM форматі буде виглядати як:

/* XPM */
static char * x_xpm[] = {
"14 15 2 1",
"       c #000000000000",
".      c #FFFFFFFFFFFF",
"              ",
"              ",
"    ......    ",
"   ........   ",
"   .  ..  .   ",
"   .  ..  .   ",
"    ..  ..    ",
"     ....     ",
"  .  ....  .  ",
" ...      ... ",
"    ..  ..    ",
" .   .... .   ",
" ...      ... ",
"  .        .  ",
"              "};

(HTML форматування може знищити зображення).
Xpaint, (xv), Gimp дозволяють зберегти зображення в XPM форматі.  
Чим цікавий цей формат, що виглядає майже як ASCII-art, тільки додано колір.
Команда для обоїв: xpmroot skull.xpm
man xpmroot
ls /usr/X11R6/include/X11/pixmaps/

Всі  ці команди, xsetroot, xpmroot, можна додавати до до ~/.xinitrc перед exec командою, звичайно.

Про інші растрові формати можна також дізнатися тут: http://astronomy.swin.edu.au/~pbourke/dataformats/bitmaps/
(обов'язково сходіть на головну сторінку, http://astronomy.swin.edu.au/~pbourke)
Дуже гарна стаття про розвиток користувацьокого інтерфейсу, як бонус (англійською, можливо комусь буде цікаво перекласти):
http://arstechnica.com/articles/paedia/gui.ars/1
« Змінено: 2005-08-02 00:26:49 від tech »