Commit 95cb6b29 authored by Natanael Copa's avatar Natanael Copa
Browse files

x11/slim: new aport

Desktop-independent graphical login manager for X11
http://slim.berlios.de/
parent 5854d484
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=slim
pkgver=1.3.1
pkgrel=0
pkgdesc="Desktop-independent graphical login manager for X11"
url="http://slim.berlios.de/"
license="GPL-2"
subpackages="$pkgname-doc"
makedepends="libxmu-dev libpng-dev jpeg-dev libxft-dev"
depends=""
install=
source="http://download.berlios.de/$pkgname/$pkgname-$pkgver.tar.gz
$pkgname.logrotate
$pkgname-restart.patch"
build ()
{
cd "$srcdir/slim-$pkgver"
patch -Np1 -i "$srcdir/slim-restart.patch" || return 1
make CXX="${CXX:-g++}" CC="${CC:-gcc}" || return 1
make DESTDIR="$pkgdir" MANDIR=/usr/share/man install || return 1
install -D -m644 "$srcdir/slim.logrotate" "$pkgdir/etc/logrotate.d/slim" || return 1
sed -i 's|#xserver_arguments.*|xserver_arguments -nolisten tcp vt07|' "$pkgdir/etc/slim.conf" || return 1
sed -i 's|/var/run/slim.lock|/var/lock/slim.lock|' "$pkgdir/etc/slim.conf" || return 1
}
md5sums="727d0acb24c0fbf0751134c37a9c895f slim-1.3.1.tar.gz
43da096480bf72c3ccec8ad8400f34f0 slim.logrotate
648d871fe7d2a97b7d7b928019e2feee slim-restart.patch"
diff -ur slim-1.3.1.orig/app.cpp slim-1.3.1/app.cpp
--- slim-1.3.1.orig/app.cpp 2008-09-26 02:54:15.000000000 +0200
+++ slim-1.3.1/app.cpp 2008-11-21 20:38:48.000000000 +0100
@@ -102,6 +102,11 @@
extern App* LoginApp;
+int xioerror(Display *disp) {
+ LoginApp->RestartServer();
+ return 0;
+}
+
void CatchSignal(int sig) {
cerr << APPNAME << ": unexpected signal " << sig << endl;
LoginApp->StopServer();
@@ -109,19 +114,6 @@
exit(ERR_EXIT);
}
-
-void AlarmSignal(int sig) {
- int pid = LoginApp->GetServerPID();
- if(waitpid(pid, NULL, WNOHANG) == pid) {
- LoginApp->StopServer();
- LoginApp->RemoveLock();
- exit(OK_EXIT);
- }
- signal(sig, AlarmSignal);
- alarm(2);
-}
-
-
void User1Signal(int sig) {
signal(sig, User1Signal);
}
@@ -267,7 +259,6 @@
signal(SIGHUP, CatchSignal);
signal(SIGPIPE, CatchSignal);
signal(SIGUSR1, User1Signal);
- signal(SIGALRM, AlarmSignal);
#ifndef XNEST_DEBUG
OpenLog();
@@ -287,7 +278,6 @@
CreateServerAuth();
StartServer();
- alarm(2);
#endif
}
@@ -603,6 +593,8 @@
int status;
while (wpid != pid) {
wpid = wait(&status);
+ if (wpid == ServerPID)
+ xioerror(Dpy); // Server died, simulate IO error
}
if (WIFEXITED(status) && WEXITSTATUS(status)) {
LoginPanel->Message("Failed to execute login command");
@@ -648,9 +640,6 @@
void App::Reboot() {
- // Stop alarm clock
- alarm(0);
-
#ifdef USE_PAM
try{
pam.end();
@@ -673,9 +662,6 @@
void App::Halt() {
- // Stop alarm clock
- alarm(0);
-
#ifdef USE_PAM
try{
pam.end();
@@ -761,6 +747,7 @@
StopServer();
RemoveLock();
+ while (waitpid(-1, NULL, WNOHANG) > 0); // Collects all dead childrens
Run();
}
@@ -831,6 +818,7 @@
for(cycles = 0; cycles < ncycles; cycles++) {
if((Dpy = XOpenDisplay(DisplayName))) {
+ XSetIOErrorHandler(xioerror);
return 1;
} else {
if(!ServerTimeout(1, (char *) "X server to begin accepting connections"))
@@ -913,9 +901,6 @@
ServerPID = -1;
break;
}
- alarm(15);
- pause();
- alarm(0);
// Wait for server to start up
if(WaitForServer() == 0) {
@@ -948,15 +933,12 @@
void App::StopServer() {
- // Stop alars clock and ignore signals
- alarm(0);
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGTERM, SIG_DFL);
signal(SIGKILL, SIG_DFL);
- signal(SIGALRM, SIG_DFL);
// Catch X error
XSetIOErrorHandler(IgnoreXIO);
diff -ur slim-1.3.1.orig/app.h slim-1.3.1/app.h
--- slim-1.3.1.orig/app.h 2008-09-26 02:54:15.000000000 +0200
+++ slim-1.3.1/app.h 2008-11-21 20:38:48.000000000 +0100
@@ -34,6 +34,7 @@
~App();
void Run();
int GetServerPID();
+ void RestartServer();
void StopServer();
// Lock functions
@@ -48,7 +49,6 @@
void Console();
void Exit();
void KillAllClients(Bool top);
- void RestartServer();
void ReadConfig();
void OpenLog();
void CloseLog();
#!/sbin/runscript
depends() {
needs localmount
}
start() {
ebegin "Starting slim"
start-stop-daemon --start --quiet --exec /usr/bin/slim -- -d
eend $?
}
stop() {
ebegin "Stopping slim"
start-stop-daemon --stop --quiet --exec /usr/bin/slim
eend $?
}
post_install() {
cat << _EOF
Add slim to the DAEMONS array in /etc/rc.conf or update /etc/inittab.
_EOF
}
/var/log/slim.log {
compress
rotate 1
size 1024k
notifempty
missingok
copytruncate
noolddir
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment