~tuomasjjrasanen/python-uinput/master

« back to all changes in this revision

Viewing changes to examples/drop_privileges.py

  • Committer: Tuomas Räsänen
  • Date: 2016-04-04 18:58:44 UTC
  • mfrom: (129.2.3)
  • Revision ID: git-v1:db7059c080c9a4d88853057230340799fd1bfc66
Merge pull request #7 from goncalopp/master

Add option to create a device with an existing uinput file descriptor

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import uinput
 
2
 
 
3
def drop_privileges(uid_name='nobody', gid_name='nogroup'):
 
4
    #https://stackoverflow.com/questions/2699907/dropping-root-permissions-in-python
 
5
    import os, pwd, grp
 
6
    if os.getuid() != 0:
 
7
        return
 
8
    running_uid = pwd.getpwnam(uid_name).pw_uid
 
9
    running_gid = grp.getgrnam(gid_name).gr_gid
 
10
    os.setgroups([])
 
11
    os.setgid(running_gid)
 
12
    os.setuid(running_uid)
 
13
    old_umask = os.umask(077)
 
14
 
 
15
 
 
16
def main():
 
17
    uinput_fd= uinput.Device.create_uinput_fd()
 
18
    drop_privileges() #no need to be root beyond this line
 
19
 
 
20
    events = (uinput.KEY_A,)
 
21
    with uinput.Device(events, fd=uinput_fd) as device:
 
22
        device.emit_click(uinput.KEY_A)
 
23
 
 
24
if __name__ == "__main__":
 
25
    main()