Parece que isso não é realmente possível. Eu acabei modificando ligeiramente a fonte do xscreensaver para forçar certas configurações. Eu tentei usar a maneira menos invasiva de realizar isso com uma modificação mínima da fonte. Isso ainda permitirá que o usuário configure muitas partes do protetor de tela, mas não aquelas relacionadas ao bloqueio de tela e ao tempo limite.
Na árvore de código-fonte, encontre o arquivo driver / prefs.c e procure a função write_init_file . Nessa função, encontre estas linhas:
if (!pr || !*pr) ;
CHECK("timeout") type = pref_time, t = p->timeout;
CHECK("cycle") type = pref_time, t = p->cycle;
CHECK("lock") type = pref_bool, b = p->lock_p;
CHECK("lockTimeout") type = pref_time, t = p->lock_timeout;
(..)
CHECK("mode") type = pref_str,
s = (p->mode == ONE_HACK ? "one" :
p->mode == BLANK_ONLY ? "blank" :
p->mode == DONT_BLANK ? "off" :
p->mode == RANDOM_HACKS_SAME
? "random-same"
: "random");
E mude para algo como a amostra de origem abaixo. O que isso fará é impedir que essas configurações sejam salvas no arquivo .xscreensaver no diretório inicial do usuário. E então, desde que o padrão do sistema seja definido como o que você preferir, o xscreensaver continuará usando essas configurações em vez do que seria configurado no arquivo .xscreensaver.
if (!pr || !*pr) ;
CHECK("timeout") continue; /* don't save */
CHECK("cycle") continue; /* don't save */
CHECK("lock") continue; /* don't save */
CHECK("lockTimeout") continue; /* don't save */
(..)
CHECK("mode") type = pref_str,
s = (p->mode == ONE_HACK ? "one" :
p->mode == BLANK_ONLY ? "blank" :
p->mode == DONT_BLANK ? "blank" : /* prevents xscreensaver from being disabled, will force to blank */
p->mode == RANDOM_HACKS_SAME
? "random-same"
: "random");
Encontre a função chamada load_init_file e altere a linha:
else if (s && !strcasecmp (s, "off")) p->mode = DONT_BLANK;
para:
else if (s && !strcasecmp (s, "off")) p->mode = BLANK_ONLY;
Agora, encontre a função adequadamente nomeada stop_the_insanity que define alguns valores das preferências de volta para valores sãos, como um tempo limite > 15 segundos serão forçados a 15 segundos. Este é um bom local para garantir que quando um usuário editar o arquivo .xscreensaver em vez de usar o xscreensaver-demo, os valores não serão usados pelo xscreensaver, mas nossos valores "sônicos" serão usados.
Na função stop_the_insanity adicione algo assim, usando seus próprios valores, se desejar. Observe que os valores para o tempo são segundos * 1000. No caso de o usuário definir o modo como "desativado", já o forçamos a ficar em branco acima.
if (p->timeout > 600000) p->timeout = 600000;
if (p->lock_timeout > 0) p->lock_timeout = 0;
if (! p->lock_p) p->lock_p = True;
No que diz respeito à criação de .xscreensaver com a propriedade de raiz no login inicial, acho que não é realmente possível ou aconselhável. Você pode criar um script em /etc/profile.d que criará um .xscreensaver vazio no login do usuário. Mas a mudança acima mencionada torna isso desnecessário.