LinuxForum.Fans
Тема

Менеджер DM/WM. Консольный.

Автор: drBatty 20 сообщений 7154 просмотров
#149733

text
#!/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: добавлен таймаут

#149768

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

#149775

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

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

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

[console]$ 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.
[/console]
я что-то забыл, что это bash

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

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

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

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

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

#149815

все равно косяк 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

#149985
redgy92 написал:
xinitrc пуст

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

#149991

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

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.
#149992

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

#150001
redgy92 написал:
а с этим что?

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

text
#!/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"

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

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

#150003

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

#150010

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

#150012

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

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

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

#150020
redgy92 написал:
теперь пытаюсь понять, откуда берутся xinitrc.*

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

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

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

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

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

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

text
#!/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"

#150028
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 можно прописать этот скрипт, и в нём вводить имя/пароль. Но практика показывает, что любая блондинко легко может набрать своё имя и свой пароль, это у неё получается не хуже, чем "тыкнуть мышью и набрать пароль".

#150033
drBatty написал:
(а как вы выбираете WM?)

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

#150044
redgy92 написал:
при старте системы запускается какой то DM

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

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

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

Войдите или зарегистрируйтесь, чтобы ответить.