On Wed, Feb 15, 2006 at 09:47:00PM -0500, Ross Vandegrift wrote:
  Ok, now I have to run an experiment. 
Experiment is done.  rlimits properly inherit with set_rlimits.
Granting RT privileges to any program I run is easy and transparent:
1) I added a line to set_rlimits.conf allowing anyone in the group
audio to run my window manager with RT abilities:
        @audio /usr/local/enlightenment/bin/enlightenment nice=-1 rtprio=80
memlock=67108864
2) I changed my .xsession to run the window manager with set_rlimits:
        exec /usr/local/bin/set_rlimits -k /usr/local/enlightenment/bin/enlightenment
The -k to set_rlimits is an option I added to continue even if
realtime privileges cannot be setup.  I did this so if I ever take
myself out of the audio group, I will still be able to login to my
Xsession.  Patch is below.
It's now just a bit more work to take the patch set_rlimits and edit
the system-wide display manager to invoke any users session with
set_rlimits.  Then, any user can take advantage of this without
modifying their config files.
diff -ur set_rlimits-1.2.0/set_rlimits.c set_rlimits/set_rlimits.c
--- set_rlimits-1.2.0/set_rlimits.c     2005-12-20 06:37:35.000000000 -0500
+++ set_rlimits/set_rlimits.c   2006-02-16 02:04:34.000000000 -0500
@@ -98,6 +98,7 @@
 signed int debug = 0;
 signed int verbose = 0;
+signed int cont = 0;
 /* rlimits for process */
 Rlimits rlimits = {
@@ -123,6 +124,7 @@
     "Available options:\n"
     " -d               Turn on additional debugging output.\n"
     " -h               Display this help message.\n"
+    " -k               Continue running program even if there's an
error.\n"
     " -n[=<nlimit>]    Set nice limit to <nlimit>.  Values 0 to 39
equate to nice\n"
     "                  levels 19 to -20 respectively.\n"
     " -r[=<priority>]  Set realtime priority limit to <priority>.  Max
available is\n"
@@ -216,6 +218,9 @@
             debug = 1;
           break;
         case 'h': err = -1; break;
+       case 'k':
+         cont = 1;
+         break;
         case 'v':
           if (argv[i][2]!=0)
             err = -1;
@@ -632,10 +637,14 @@
     return -1;
   }
   /* No matching entry - permission denied */
-  if (!match) {
+  if (!match && !cont) {
     fprintf(stderr,"set_rlimits: no permission to run %s with elevated resource
limits\n",
       *exec_path);
     return 0;
+  } else if (!match && cont) {
+    fprintf(stderr,"set_rlimits: no permission to run %s with elevated resource
limits\n",
+      *exec_path);
+    fprintf(stderr,"set_rlimits: continuing anyway, as requested...\n");
   }
   if (debug) {
--
Ross Vandegrift
ross(a)lug.udel.edu
"The good Christian should beware of mathematicians, and all those who
make empty prophecies. The danger already exists that the mathematicians
have made a covenant with the devil to darken the spirit and to confine
man in the bonds of Hell."
        --St. Augustine, De Genesi ad Litteram, Book II, xviii, 37