OpenSolaris, OpenIndiana, Nexenta Forum

OpenSolaris, OpenIndiana, Nexenta => OpenIndiana => Тема начата: keremet от Январь 17, 2015, 02:48:42 am

Название: Замечательный оконный менеджер DWM
Отправлено: keremet от Январь 17, 2015, 02:48:42 am
http://dwm.suckless.org/
http://www.calculate-linux.org/blogs/ru/212/show

Компиляция и установка:
wget http://dl.suckless.org/dwm/dwm-6.0.tar.gz
tar xf dwm-6.0.tar.gz
cd dwm-6.0
make
sudo cp dwm /usr/bin

$ cat ~/.xinitrc
exec dwm

Запуск: startx


Указать шрифты из /usr/X11/lib/X11/fonts , чтобы отображались русские буквы на верхней панели

Меню:
wget http://dl.suckless.org/tools/dmenu-4.5.tar.gz
tar xf dmenu-4.5.tar.gz
cd dmenu-4.5
make
sudo cp dmenu /usr/bin/dmenu_run

Изменения в исходники dmenu:
   case XK_KP_Enter:   
      if (vfork() == 0){                // child 
         if(execlp((sel && !(ev->state & ShiftMask)) ? sel->text : text, 0)<0){
            //cerr<< "failed to execvp\n";
            //return -1;
         }
      //}else if (pID < 0){            // failed to fork
      }else{
      }
      /*puts*///system((sel && !(ev->state & ShiftMask)) ? sel->text : text);
      exit(EXIT_SUCCESS);
.....
static Item items[] ={{"firefox", 0, 0}, {"gedit", 0, 0}, {"gajim", 0, 0}, {"gnome-commander", 0, 0}, {"gimp", 0, 0}, {"soffice", 0, 0}, {0,0,0}};
....

void
readstdin(void) {
   char buf[sizeof text], *p, *maxstr = NULL;
   size_t i, max = 0, size = 0;

   /* read each line from stdin and add it to the item list */
/*   for(i = 0; fgets(buf, sizeof buf, stdin); i++) {
      if(i+1 >= size / sizeof *items)
         if(!(items = realloc(items, (size += BUFSIZ))))
            eprintf("cannot realloc %u bytes:", size);
      if((p = strchr(buf, '\n')))
         *p = '\0';
      if(!(items.text = strdup(buf)))
         eprintf("cannot strdup %u bytes:", strlen(buf)+1);
      if(strlen(items.text) > max)
         max = strlen(maxstr = items.text);
   }
   if(items)
      items.text = NULL;*/
   inputw = maxstr ? textw(dc, maxstr) : 0;
   lines = MIN(lines, i);
}
Название: Re: Замечательный оконный менеджер DWM
Отправлено: openuser от Январь 20, 2015, 12:52:06 pm
dmenu - не собирается, gedit - падает, а так нормально.

(http://s12.postimg.org/jmxs8dj6x/Screenshot_dwm_6dot0.jpg) (http://postimg.org/image/jmxs8dj6x/)
Название: Re: Замечательный оконный менеджер DWM
Отправлено: keremet от Январь 21, 2015, 10:03:54 pm
Забыл  написать: чтобы собралось dmenu, надо изменить CFLAGS в config.mk - убрать опцию -D_POSIX_C_SOURCE=2
Название: Re: Замечательный оконный менеджер DWM
Отправлено: keremet от Январь 21, 2015, 10:05:43 pm
А когда gedit падает, он выдает какие-нибудь сообщения? У меня он и из терминала, и из dmenu нормально открывается
Название: Re: Замечательный оконный менеджер DWM
Отправлено: openuser от Январь 22, 2015, 10:08:57 am
На снимке слева вверху есть сообщения от gedit, он нигде ещё не записан в dwm.
Название: Re: Замечательный оконный менеджер DWM
Отправлено: openuser от Январь 26, 2015, 12:52:01 am
Собралось на пробу кое-что

md5: 4519eaa6191eeed6ac090bc368258ca2   terminus-font-4.38-x86-oi_151a9.pkg.tar.bz2 (https://yadi.sk/d/Gb1OvZuJeEHRH)
md5: 8ccf38f14e2d72024c33ea0a0b944290   dwm-6.0-x86-oi_151a9.pkg.tar.bz2 (https://yadi.sk/d/4cINJbvzeEHaN)
md5: a9e480f21d8f7f80e1da03c8f887be8d   dmenu-4.5-x86-oi_151a9.pkg.tar.bz2 (https://yadi.sk/d/eWnKbUUBeEHb7)

(http://s8.postimg.org/y9dzd1169/Screenshot_dwm.jpg) (http://postimg.org/image/y9dzd1169/)
Название: Re: Замечательный оконный менеджер DWM
Отправлено: keremet от Январь 29, 2015, 12:17:05 am
Нашел пачт, чтобы сделать добавить трей в правом верхем углу: http://dwm.suckless.org/patches/systray

Чтобы отображались дата и время, а также менялась раскладка:
keremet@openindiana:~$ cat .xinitrc
setxkbmap -layout "us,ru"
setxkbmap -option "grp:ctrl_shift_toggle"
while xsetroot -name "`date '+%d.%m.%y %H:%M:%S'`"
    do
       sleep 1
    done &
exec dwm
Название: Re: Замечательный оконный менеджер DWM
Отправлено: openuser от Февраль 02, 2015, 01:06:34 pm
Набросал скриптик на выход, перезагрузку и выключение.
Открывается из dmenu, если его подходяще назвать
и положить в /usr/bin
#!/usr/bin/bash

zenity_list() {
  RETURN=$(/usr/bin/zenity --list \
             --title="$(uname -svp)" \
             --text="                        $HOSTNAME" \
             --column='' --column="Pick me" \
             --hide-column=1 \
             1 Logout \
             2 Reboot \
             3 Shutdown
  )
}

if [ -x /usr/bin/zenity ]; then
  if [ -n "$DISPLAY" ]; then
    zenity_list
      if [ -n "$RETURN" ]; then
        case "$RETURN" in
          1)  /usr/bin/zenity --question --timeout=10 \
                --title "Logout Confirmation" --text "\nLogout?"
              if [ "$?" -eq "0" ]
              then
                /usr/gnu/bin/kill -1 $(/usr/bin/pgrep X) > /dev/null 2>&1
              fi
              ;;
          2)  /usr/bin/zenity --entry --title "Reboot Confirmation" \
                --text "Enter user password to reboot:" --entry-text "" \
                --hide-text|/usr/bin/sudo -S /usr/sbin/reboot -p > /dev/null 2>&1
              ;;
          3)  /usr/bin/zenity --entry --title "Shutdown Confirmation" \
                --text "Enter user password to shutdown:" --entry-text "" \
                --hide-text|/usr/bin/sudo -S /usr/sbin/init 5 > /dev/null 2>&1
              ;;
        esac
      fi
  fi
fi

А если сделать ~/.bash_profile то иксы будут стартовать
при входе.
if [[ -z "$DISPLAY" ]] && [[ $(tty) = /dev/console ]]; then
  echo ""
  echo "Hello!"
  echo ""
  exec startx
fi