Simple devd.conf rule has no effect
Warren Block
wblock at wonkity.com
Wed Apr 20 00:20:35 UTC 2016
On Tue, 19 Apr 2016, Brandon J. Wandersee wrote:
>
> Warren Block writes:
>
>> On Wed, 6 Apr 2016, Brandon J. Wandersee wrote:
>>
>>>
>>> Hi, folks. I'm trying to get my laptop screen to lock when the lid
>>> closes, using x11/slock. I've created the file /etc/devd/lidlock.conf
>>> with the following rule:
>>>
>>> | notify 0 {
>>> | match "system" "ACPI";
>>> | match "subsystem" "Lid";
>>> | match "notify" "0x00";
>>> | action "/usr/local/bin/slock";
>>> | };
>>>
>>> This is really just a slight variation on the example from the
>>> devd.conf(5) man page. Now when I close the lid, the screen fails to
>>> lock, yet /var/log/messages displays the message "devd: Executing
>>> 'slock'". Any advice on what to look into to figure out why the program
>>> is not actually executed? Thanks in advace.
>>
>> devd(8) stuff runs as root, I think. So it probably does not have
>> $DISPLAY set. Maybe use su to switch to the normal X user and execute
>> the command:
>>
>> su -l xusername -c 'setenv DISPLAY :0.0 && /usr/local/bin/slock'
>
> Thanks for the response, Warren; sorry for the lateness of mine. Your
> solution works when run from a shell, but devd still doesn't properly
> execute it. I also tried changing the quotes around, adapting it for my
> user shell (changing 'setenv' to 'export DISPLAY='), and putting it in a
> shell script and executing the script from the devd config file. No
> luck. Guess I'll just keep messing with it when the mood strikes, see if
> anything clicks.
This was actually a good time for a reply, as I needed to set up
something similar. The idea was to run xlock before suspending so text
on the screen is not visible when it wakes up. This, based on your
example, finally worked:
notify 20 {
match "system" "ACPI";
match "subsystem" "Lid";
match "notify" "0x00";
action "/usr/bin/su wblock -c '/usr/local/bin/xlock -display :0.0 -mode qix & /bin/sleep 2'"'
action "acpiconf -s3";
};
Running xlock as my unprivileged user might not be necessary, but seems
safer. The 'sleep 2' might not be required, either, but it didn't want
to work correctly until I did that. More experimentation is needed.
The second action runs as root to suspend the machine. There is
/etc/rc.suspend, but X already seemed to be stopped by the time that
executed. Or something prevented running xlock from in there.
More information about the freebsd-questions
mailing list