CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
21.11.2017

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Окружение :: Графические среды :: KDE

Ускорение запуска KDE

POSIX.ru

Не секрет, что KDE слишком долго запускается - это является, наверное, самой главной причиной разговоров о его тормознутости, ведь работать в этой среде можно, притом вполне быстро и успешно. Почему так происходит? Выделю несколько причин:

  • стартовый скрипт startkde;
  • большое количество приложений, загружаемых в трей;
  • службы, запускающиеся при старте KDE.

Что со всем этим делать? Кажется, понятно: скрипт startkde надо модифицировать, ненужные приложения из трея выкинуть, ненужные службы убрать из автозагрузки. Например, мне не нужен ни календарь, ни Klipper, которые запускались по умолчанию у меня. С ними сладить легко: правой кнопкой на иконку в трее, выйти и не запускаться при логине. Итак, из трея всё ненужное таким способом убрано (я оставил лишь klaptop - довольно полезная вещь).

Теперь отключим ненужные службы (Control Center -> KDE Components -> Service Manager). Синтаксис вроде бы прозрачный: внизу службы, которые запускаются при загрузке KDE, а вверху - те, которые запускаются после действия пользователя. Также можно изменить пункт KDE Performance (тоже находится в KDE Components): preloading поставить на 0 (чтобы Konqueror никогда не загружался в память при старте), а во вкладке System поставить галочку (перед этим обязательно прочитав, к чему это может привести =)). По пунктам меню есть довольно подробная помощь, так что можно ей воспользоваться. Заключительный аккорд: правим startkde (у меня он находится в /opt/kde/bin), найдя его с помощью либо find, либо простого whereis. Всё, касающееся шрифтов в этом скрипте я удалил (множественные mkfontdir'ы, rebuild шрифтов...). Больше никакого криминала я с ходу не нашёл :). Для того чтобы pacman при установке нового пакета kdebase не переписал этот файл, стоит прописать в /etc/pacman.conf этот файл в NoUpgrade). Приложу свой startkde:

#!/bin/sh

#
#  DEFAULT KDE STARTUP SCRIPT ( KDE-3.5.6 )
#

# When the X server dies we get a HUP signal from xinit. We must ignore
it
# because we still need to do some cleanup.
trap 'echo GOT SIGHUP' HUP

# Check if a KDE session already is running

if kcheckrunning >/dev/null 2>&1; then
    echo "KDE seems to be already running on this
display."
    xmessage -geometry 500x100 "KDE seems to be already
running on this display." > /dev/null 2>/dev/null
    exit 1
fi


# Set the background to plain grey.
# The standard X background is nasty, causing moire effects and
exploding
# people's heads. We use colours from the standard KDE palette for
those with
# palettised displays.
if test -z "$XDM_MANAGED" || echo "$XDM_MANAGED" | grep ",auto" >
/dev/null; then
  xsetroot -solid "#000000"
fi


# we have to unset this for Darwin since it will screw up KDE's
dynamic-loading
unset DYLD_FORCE_FLAT_NAMESPACE

# in case we have been started with full pathname spec without being in
PATH
bindir=`echo "$0" | sed -n 's,^\(/.*\)/[^/][^/]*$,\1,p'`
if [ -n "$bindir" ]; then
  case $PATH in
    $bindir|$bindir:*|*:$bindir|*:$bindir:*) ;;

    *) PATH=$bindir:$PATH; export PATH;;
  esac
fi

# Boot sequence:
#
# kdeinit is used to fork off processes which improves memory usage
# and startup time.

#
# * kdeinit starts the dcopserver and klauncher first.
# * Then kded is started. kded is responsible for keeping the sycoca
#   database up to date. When an up to date database is
present it goes
#   into the background and the startup continues.
# * Then kdeinit starts kcminit. kcminit performs initialisation of
#   certain devices according to the user's settings

#
# * Then ksmserver is started which takes control of the rest of the
startup sequence

# The user's personal KDE directory is usually ~/.kde, but this setting
# may be overridden by setting KDEHOME.

kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=`echo "$KDEHOME"|sed
"s,^~/,$HOME/,"`


# see kstartupconfig source for usage
mkdir -m 700 -p $kdehome
mkdir -m 700 -p $kdehome/share
mkdir -m 700 -p $kdehome/share/config
cat >$kdehome/share/config/startupconfigkeys <<EOF
kcminputrc Mouse cursorTheme ''
kcminputrc Mouse cursorSize ''
kpersonalizerrc General FirstLogin true

ksplashrc KSplash Theme Default
kcmrandrrc Display ApplyOnStartup false
kcmrandrrc [Screen0]
kcmrandrrc [Screen1]
kcmrandrrc [Screen2]
kcmrandrrc [Screen3]
kcmfonts General forceFontDPI 0
EOF
kstartupconfig

if test $? -ne 0; then
    xmessage -geometry 500x100 "Could not start
kstartupconfig. Check your installation."
fi
. $kdehome/share/config/startupconfig

# XCursor mouse theme needs to be applied here to work even for kded or
ksmserver
if test -n "$kcminputrc_mouse_cursortheme" -o -n
"$kcminputrc_mouse_cursorsize" ; then
    kapplymousetheme "$kcminputrc_mouse_cursortheme"
"$kcminputrc_mouse_cursorsize"

    if test $? -eq 10; then
        export XCURSOR_THEME=default
    elif test -n "$kcminputrc_mouse_cursortheme"; then
        export
XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
    fi
    if test -n "$kcminputrc_mouse_cursorsize"; then

        export
XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
    fi
fi

if test "$kcmrandrrc_display_applyonstartup" = "true"; then
    # 4 screens is hopefully enough
    for scrn in 0 1 2 3; do

        args=
       
width="\$kcmrandrrc_screen${scrn}_width" ; eval "width=$width"
       
height="\$kcmrandrrc_screen${scrn}_height" ; eval "height=$height"
        if test -n "${width}" -a -n
"${height}"; then
           
args="$args -s ${width}x${height}"
        fi

       
refresh="\$kcmrandrrc_screen${scrn}_refresh" ; eval "refresh=$refresh"
        if test -n "${refresh}"; then
           
args="$args -r ${refresh}"
        fi
       
rotation="\$kcmrandrrc_screen${scrn}_rotation" ; eval
"rotation=$rotation"
        if test -n "${rotation}";
then

            case
"${rotation}" in
               
0)
                   
args="$args -o 0"
                   
;;
               
90)
                   
args="$args -o 1"

                   
;;
               
180)
                   
args="$args -o 2"
                   
;;
               
270)
                   
args="$args -o 3"

                   
;;
            esac
        fi
       
reflectx="\$kcmrandrrc_screen${scrn}_reflectx" ; eval
"reflectx=$reflectx"
        if test "${refrectx}" =
"true"; then
           
args="$args -x"

        fi
       
reflecty="\$kcmrandrrc_screen${scrn}_reflecty" ; eval
"reflecty=$reflecty"
        if test "${refrecty}" =
"true"; then
           
args="$args -y"
        fi
        if test -n "$args"; then

           
xrandr $args
        fi
    done
fi

dl=$DESKTOP_LOCKED
unset DESKTOP_LOCKED # Don't want it in the environment


# Launch splash that doesn't need any KDE libraries here, before
# KDE libraries are loaded into memory (which may take some time
# with cold caches). Makes the splash appear sooner.
# If kpersonalizer needs to be run splash will be started only later.
if test -z "$dl" && test "$kpersonalizerrc_general_firstlogin"
!= "true"; then
    case "$ksplashrc_ksplash_theme" in 
      Simple)

         ksplashsimple 
         ;;
      *)
         ;;
    esac
fi


if test "$kcmfonts_general_forcefontdpi" -eq 120; then
    xrdb -quiet -merge -nocpp <<EOF
Xft.dpi: 120
EOF
elif test "$kcmfonts_general_forcefontdpi" -eq 96; then
    xrdb -quiet -merge -nocpp <<EOF

Xft.dpi: 96
EOF
fi

# Source scripts found in <localprefix>/env/*.sh and
<prefixes>/env/*.sh
# (where <localprefix> is $KDEHOME or ~/.kde, and

<prefixes> is where KDE is installed)
#
# This is where you can define environment variables that will be
available to
# all KDE programs, so this is where you can run agents using e.g. eval
`ssh-agent`
# or eval `gpg-agent --daemon`.
# Note: if you do that, you should also put "ssh-agent -k" as a
shutdown script
#
# (see end of this file).

# For anything else (that doesn't set env vars, or that needs a window
manager),
# better use the Autostart folder.

exepath=`kde-config --path exe | tr : '\n'`

for prefix in `echo "$exepath" | sed -n -e 's,/bin[^/]*/,/env/,p'`; do
  for file in "$prefix"*.sh; do
    test -r "$file" && . "$file"

  done
done

# Set a left cursor instead of the standard X11 "X" cursor, since I've
heard
# from some users that they're confused and don't know what to do. This
is
# especially necessary on slow machines, where starting KDE takes one
or two
# minutes until anything appears on the screen.
#
# If the user has overwritten fonts, the cursor font may be different
now

# so don't move this up.
#
xsetroot -cursor_name left_ptr

# Link "tmp" resource to directory in /tmp
# Creates a directory /tmp/kde-$USER and links $KDEHOME/tmp-$HOSTNAME
to it.
lnusertemp tmp >/dev/null

# Link "socket" resource to directory in /tmp

# Creates a directory /tmp/ksocket-$USER and links
$KDEHOME/socket-$HOSTNAME to it.
lnusertemp socket >/dev/null

# Link "cache" resource to directory in /var/tmp
# Creates a directory /var/tmp/kdecache-$USER and links
$KDEHOME/cache-$HOSTNAME to it.
lnusertemp cache >/dev/null

# In case of dcop sockets left by a previous session, cleanup
dcopserver_shutdown


echo 'startkde: Starting up...'  1>&2

# run KPersonalizer before the session, if this is the first login
if test "$kpersonalizerrc_general_firstlogin" = "true"; then
    # start only dcopserver, don't start whole kdeinit
(takes too long)
    echo 'startkde: Running kpersonalizer...' 

1>&2
    dcopserver
    kwin --lock &
    kpersonalizer --before-session
    # handle kpersonalizer restarts (language change)
    while test $? -eq 1; do

        kpersonalizer --r
--before-session
    done
    dcopquit kwin
    dcopserver_shutdown --wait
fi

if test -z "$dl"; then

  # the splashscreen and progress indicator
  case "$ksplashrc_ksplash_theme" in 
    None)
       ;; # nothing
    Simple)
       if test
"$kpersonalizerrc_general_firstlogin" = "true"; then

          
ksplashsimple 
       fi # otherwise started earlier
       ;;
    *)
       ksplash --nodcop
       ;;

  esac
fi

# Mark that full KDE session is running (e.g. Konqueror preloading
works only
# with full KDE running). The KDE_FULL_SESSION property can be detected
by
# any X client connected to the same X session, even if not launched
# directly from the KDE session but e.g. using "ssh -X", kdesu.
$KDE_FULL_SESSION
# however guarantees that the application is launched in the same
environment
# like the KDE session and that e.g. KDE utilities/libraries are
available.

# KDE_FULL_SESSION property is also only available since KDE 3.5.5.
# The matching tests are:
#   For $KDE_FULL_SESSION:
#     if test -n "$KDE_FULL_SESSION"; then ...
whatever
#   For KDE_FULL_SESSION property:
#     xprop -root | grep "^KDE_FULL_SESSION"

>/dev/null 2>/dev/null
#     if test $? -eq 0; then ... whatever
#
KDE_FULL_SESSION=true
export KDE_FULL_SESSION
xprop -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true

# We set LD_BIND_NOW to increase the efficiency of kdeinit.

# kdeinit unsets this variable before loading applications.
LD_BIND_NOW=true start_kdeinit --new-startup +kcminit_startup
if test $? -ne 0; then
  # Startup error
  echo 'startkde: Could not start kdeinit. Check your
installation.'  1>&2
  xmessage -geometry 500x100 "Could not start kdeinit. Check your
installation."

fi

# If the session should be locked from the start (locked autologin),
# lock now and do the rest of the KDE startup underneath the locker.
if test -n "$dl"; then
  kwrapper kdesktop_lock --forcelock &
  # Give it some time for starting up. This is somewhat unclean;
some
  # notification would be better.

  sleep 1
fi

# finally, give the session control to the session manager
# see kdebase/ksmserver for the description of the rest of the startup
sequence
# if the KDEWM environment variable has been set, then it will be used
as KDE's
# window manager instead of kwin.
# if KDEWM is not set, ksmserver will ensure kwin is started.
# kwrapper is used to reduce startup time and memory usage

# kwrapper does not return usefull error codes such as the exit code of
ksmserver.
# We only check for 255 which means that the ksmserver process could
not be 
# started, any problems thereafter, e.g. ksmserver failing to
initialize, 
# will remain undetected.
test -n "$KDEWM" && KDEWM="--windowmanager $KDEWM"
kwrapper ksmserver $KDEWM 
if test $? -eq 255; then
  # Startup error

  echo 'startkde: Could not start ksmserver. Check your
installation.'  1>&2
  xmessage -geometry 500x100 "Could not start ksmserver. Check
your installation."
fi

# wait if there's any crashhandler shown
while dcop | grep -q ^drkonqi- ; do
    sleep 5

done

echo 'startkde: Shutting down...'  1>&2

# Clean up
kdeinit_shutdown
dcopserver_shutdown --wait
artsshell -q terminate


echo 'startkde: Running shutdown scripts...'  1>&2

# Run scripts found in $KDEDIRS/shutdown
for prefix in `echo "$exepath" | sed -n -e
's,/bin[^/]*/,/shutdown/,p'`; do
  for file in `ls "$prefix" 2> /dev/null | egrep -v
'(~|\.bak)$'`; do
    test -x "$prefix$file" && "$prefix$file"

  done
done

unset KDE_FULL_SESSION
xprop -root -remove KDE_FULL_SESSION

echo 'startkde: Done.'  1>&2



Комментарии

Страницы комментариев: 1 :: 2 :: следующая

аноним, Sun Apr 5 20:44:26 2009:
2 аноним, воскресенье, 5 апреля 2009 г. 16:58:18:

небыдло-линпуксоид? O_o
аноним, Sun Apr 5 16:58:18 2009:
Ускорение запуска KDE

Они там, че? на карманных калькуляторах запускают kde, по этому долго грузится? Надо не над скриптами потеть, а купить нормальный компютер. мечтают въехать на метле во второе тысячелетие.. халявщики, вы нам не партнеры. хе.. хе..
аноним, Sun Apr 5 15:46:45 2009:
Сейчас использую KDE3.5.10
Достаточно выкинуть ненужные службы и запускается примерно за секунду.
sysadmin MSX, Tue Mar 27 01:09:24 2007:
Console рулит....
fyjybv, Wed Mar 21 00:16:45 2007:
При том обычно это мелочь, но сказывающуюся на всем - узкие места как и в любом проекте.
fyjybv, Wed Mar 21 00:15:39 2007:
Существенный рефакторинг не помешал бы. На домашней не заметно, а вот на работе да - поставил XFce - доволен.
А.К., Wed Mar 21 00:06:41 2007:
Что-то не ахти всё это ускоряет... Вот заключение кусков этого же кода в блоки и выделение их в фон - ускоряет немного
Kknight, Tue Mar 20 09:52:39 2007:
Статья лаконична и в тему, понравилось. Собственно, я запускаю кеды так: kdeinit && kdesktop && kicker. По скорости это самый быстрый вариант, имхо.
Kknight, Tue Mar 20 09:47:49 2007:
Статья лаконична и в тему, понравилось. Собственно, я запускаю кеды так: kdeinit && kdesktop && kicker. По скорости это самый быстрый вариант, имхо.
anton.bugs@gm@il, Tue Mar 20 02:57:27 2007:
админ, не доставай меня. Не надо стирать коментарии только потому, что нечего сказать в ответ.
Ускорение KDE на 50% для тех, кому интересно
www.gentoo.org/doc/en/prelink-howto.xml

Страницы комментариев: 1 :: 2 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds