1 (31.05.2011 06:23:02 отредактировано drBatty)

http://drbatty.ru/files/313.png


#!/bin/bash

TIMEOUT=20
TMP="${TMP:-/tmp}"

xinit_path="/etc/X11/xinit"

DEFAULT_WM=`readlink $xinit_path/xinitrc`
DEFAULT_WM="${DEFAULT_WM##*.}"
export DEFAULT_WM

xp="$xinit_path/xinitrc.*"

N=`ls $xp | wc -l`
if (( N <= 1 )); then
    # одно WM или 0. Выбора нет
    exit
fi


cat >$TMP/cdm.sed <<EOS
1idialog --title "Select WM/DE (TimeOut: $TIMEOUT sec)." \\\\
1i--timeout 20 \\\\
1i--nocancel \\\\
1i--no-kill \\\\
1i--menu "Select" 21 76 10 \\\\
s~.*\.([^/]+)$~"\1" "\1"~
T
s~$~ \\\\~
H
\${
    g
    s/^\n//
    s/(.*)\n("$DEFAULT_WM"[^\n]+)\n(.*)/\2\n\1\n\3/
    p
    a 2>\$TMP/cdmtemp
}
EOS

CMD=`ls $xp | sed -rnf $TMP/cdm.sed`
eval "$CMD"

DE=`cat $TMP/cdmtemp`

rm -f $TMP/cdm{temp,.sed}
PWD="`pwd`"
cd $xinit_path
if echo "$DE" | sed '${/^timeout$/q77;}'
then
    ln -svf xinitrc.$DE xinitrc
fi
cd "$PWD"

надоело мне тут DE ручками выбирать... Не gdm-же ставить в самом деле!

UPD: исправлено s/sh/bash/
UPD: добавлен таймаут

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

2

Зачётно!
Молодец, Док!
только вот нужно чтобы все эти прибамбасы стояли в системе, а то если их нет, то на месте отсутсвующего просто написано sh:
И ещё непонятно, а зачем сделано в 2 столбика?
Но всёравно плюсую, по крайней мере можно использовать как скринсейвер, когда отходишь от консоли сервака  ag

Истина ускользает от тех кто отказывается её видеть обоими глазами.
Талантам нужно помогать, бездарности пробьются сами.
В Туле настолько суровые парни, что вместо пены для бритья, используют пену монтажную.
cat /broken/hands > /dev/null

3

интересная весчица  smile тока не понял что ему надо

 Консоль:
root@redgypc:/home/redgy92#  ./de.sh
./de.sh: 22: source: not found
cat: /tmp/cdmtemp: Нет такого файла или каталога
«xinitrc» -> «xinitrc.»

Да хранит вас Ctrl+S!

4

redgy92 пишет:

интересная весчица  smile тока не понял что ему надо

 Консоль:
$ help source
source: source filename [arguments]
    Execute commands from a file in the current shell.
   
    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.
   
    Exit Status:
    Returns the status of the last command executed in FILENAME; fails if
    FILENAME cannot be read.

я что-то забыл, что это bash

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

Vadimsky пишет:

только вот нужно чтобы все эти прибамбасы стояли в системе, а то если их нет, то на месте отсутсвующего просто написано sh:

нет примбомбаса - нету. у вас и будет sh если не пропишите.

Vadimsky пишет:

И ещё непонятно, а зачем сделано в 2 столбика?

какой-то прикол в программе dialog. там по синтаксису два параметра
1) имя параметра
2) пояснение.

у меня парсится ls /etc/X11/xinit/* я-же не в курсе, что у вас там...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

6

все равно косяк  smile

Error: Expected at least 6 tokens for --menu, have 4.


redgy92@redgypc:~$ ls -al /etc/X11/xinit/
итого 12
drwxr-xr-x 2 root root 4096 2011-04-09 20:37 .
drwxr-xr-x 9 root root 4096 2011-04-08 10:20 ..
-rwxr-xr-x 1 root root    0 2011-04-09 20:37 xinitrc
-rwxr-xr-x 1 root root   46 2009-12-07 17:07 xserverrc

xinitrc пуст  smile

Да хранит вас Ctrl+S!

7

redgy92 пишет:

xinitrc пуст

как-бы странно использовать программу для ВЫБОРА wm/de, если у вас нет этого самого выбора нет. Вам пустой экран надо было показать? ну ладно, сейчас встрою проверку... Для такого терминального случая...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8 (10.04.2011 13:32:55 отредактировано redgy92)

ой, это я на косячил  ag

xinitrc пишет:

#!/bin/bash

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession


а с этим что?

Error: Expected at least 6 tokens for --menu, have 4.

Да хранит вас Ctrl+S!

9

Ай, молодец Док. Правда я перезагружаюсь в последнее время максимум раз в неделю... или когда свет выключат.  smile

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

10 (10.04.2011 14:39:58 отредактировано drBatty)

redgy92 пишет:

а с этим что?

оно и есть - программа желает вывести список DE, у вас он пуст. По идее, должен быть пустой экран.

#!/bin/bash

TMP="${TMP:-/tmp}"

xinit_path="/etc/X11/xinit"
xp="$xinit_path/xinitrc.*"

N=`ls $xp | wc -l`
if (( N <= 1 )); then
    # одно WM или 0. Выбора нет
    exit
fi

ls $xp | sed -rn '
1idialog --title "Select WM/DE" \\\n--nocancel \\\n--no-kill \\
1i--menu "Select" 21 76 10 \\
s~.*\.([^/]+)$~"\1" "\1"~
T
s~$~ \\~
H
${
    g
    s/^\n//
    s/(.*)\n("icewm"[^\n]+)\n(.*)/\2\n\1\n\3/
    p
    a 2>$TMP/cdmtemp
}
' >$TMP/cdmcmd

source $TMP/cdmcmd

DE=`cat $TMP/cdmtemp`

rm -f $TMP/cdm{temp,cmd}
PWD="`pwd`"
cd $xinit_path
ln -svf xinitrc.$DE xinitrc
cd "$PWD"
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

11

newzenon пишет:

Ай, молодец Док. Правда я перезагружаюсь в последнее время максимум раз в неделю... или когда свет выключат.

я тоже. А если я хочу KDE вместо IceWM?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

12

да... надо умолчание сделать не icewm, а то, что было в прошлый раз. Это я в TODO  wink

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

13

сменил #!/bin/sh на #!/bin/bash, все заработало  smile теперь пытаюсь понять, откуда берутся xinitrc.*  :o

Да хранит вас Ctrl+S!

14 (10.04.2011 14:50:36 отредактировано sun)

Не gdm-же ставить в самом деле!

Можно ведь лёгенький slim поставить. И, да, а зачем одновременно ставить и кеды и крысу и еще пригоршню wm`ов?

п.с. Доктор, а беспарольную автозагрузку реализовать реально?

Ничто из того, что поддаётся объяснению, не существует.

15

redgy92 пишет:

теперь пытаюсь понять, откуда берутся xinitrc.*

это от дистра зависит. у меня они сами делаются во время установки WM. И сами исчезают. Для того менеджер и нужен. И для того там есть переменная, которую надо поменять, если у вас по другому. (а как вы выбираете WM?)

sun пишет:

И, да, а зачем одновременно ставить и кеды и крысу и еще пригоршню wm`ов?

какое вам до этого дело? Есть два варианта:

1) у вас один WM. Тогда эта программа вам НЕ нужна. Зачем вам менеджер того, чего нет? Если у вас только KDE, то ничего и выбирать не надо.
2) у вас много WM. Не важно почему. Вам необходим какой-то менеджер. Например этот. Или просто ручками менять. Или gdm.

redgy92 пишет:

сменил #!/bin/sh на #!/bin/bash

исправил. спасиб.

#!/bin/bash

TMP="${TMP:-/tmp}"

xinit_path="/etc/X11/xinit"

DEFAULT_WM=`readlink $xinit_path/xinitrc`
DEFAULT_WM="${DEFAULT_WM##*.}"
export DEFAULT_WM

xp="$xinit_path/xinitrc.*"

N=`ls $xp | wc -l`
if (( N <= 1 )); then
    # одно WM или 0. Выбора нет
    exit
fi


cat >$TMP/cdm.sed <<EOS
1idialog --title "SelectWM/DE" \\\\
1i--nocancel \\\\
1i--no-kill \\\\
1i--menu "Select" 21 76 10 \\\\
s~.*\.([^/]+)$~"\1" "\1"~
T
s~$~ \\\\~
H
\${
    g
    s/^\n//
    s/(.*)\n("$DEFAULT_WM"[^\n]+)\n(.*)/\2\n\1\n\3/
    p
    a 2>\$TMP/cdmtemp
}
EOS

CMD=`ls $xp | sed -rnf $TMP/cdm.sed`
eval "$CMD"

DE=`cat $TMP/cdmtemp`

rm -f $TMP/cdm{temp,.sed}
PWD="`pwd`"
cd $xinit_path
ln -svf xinitrc.$DE xinitrc
cd "$PWD"
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

16

sun пишет:

а беспарольную автозагрузку реализовать реально?

легко. а оно надо?

1) читаем /etc/inittab

2) там написано agetty

man agetty пишет:

AGETTY(8)                                                                                               AGETTY(8)

NAME
       agetty - alternative Linux getty

SYNOPSIS
       agetty  [-c8ihLmnsUw]  [-f  issue_file]  [-l  login_program]  [-I  init] [-t timeout] [-H login_host] port
       baud_rate,...  [term]

DESCRIPTION
       agetty opens a tty port, prompts for a login name and invokes  the  /bin/login  command.  It  is  normally
       invoked by init(8).

3) видно, что запускается команда login, но можно это изменить.

man login пишет:

OPTIONS
       -f
           Do not perform authentication, user is preauthenticated.

           Note: In that case, username is mandatory.

       -h
           Name of the remote host for this login.

видно, что достаточно юзать опции -fh, и написать, какой именно юзверь будет логинится. Вот только я не думаю, что это хорошая идея.

В принципе, вместо login можно прописать этот скрипт, и в нём вводить имя/пароль. Но практика показывает, что любая блондинко легко может набрать своё имя и свой пароль, это у неё получается не хуже, чем "тыкнуть мышью и набрать пароль".

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

17

drBatty пишет:

(а как вы выбираете WM?)

при старте системы запускается какой то DM  smile снизу есть выбор
скорей всего lxdm, т.к. lxde стоит smile но при apt-get purge lxdm пишет не установлено

Да хранит вас Ctrl+S!

18

redgy92 пишет:

при старте системы запускается какой то DM

я не про то. Что-бы сделать так, что-бы мой DM работал у вас, нужно знать КАК. У меня вот ссылки просто правятся. В других дистрах может быть и по другому. С другой стороны - зачем вам второй DM?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

19

redgy92 пишет:

но при apt-get purge lxdm пишет не установлено

он наверное является неотъемлемой частью LXDE.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

20

upd

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)