Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. '''
  4. Timeout /dev/input/jsX device when no input received
  5. This script is designed to be used with a udev rule that triggers a systemd service:
  6.  
  7. /etc/udev/rules.d/10-jstimeout.rules
  8. ACTION=="add",ATTRS{name}=="Sony PLAYSTATION(R)3 Controller", ATTR{properties}=="0", TAG+="systemd", ENV{SYSTEMD_WANTS}="jstimeout@%E{UNIQ}.service"
  9.  
  10. sudo udevadm control --reload-rules; sudo service udev restart; sudo systemctl restart systemd-udevd.service
  11.  
  12. /etc/systemd/system/jstimeout@.service
  13. [Unit]
  14. Description=js Device Timeout
  15.  
  16. [Service]
  17. Type=simple
  18. RemainAfterExit=no
  19. ExecStart=/usr/local/bin/jstimeout.py %I
  20.  
  21. [Install]
  22. WantedBy=multi-user.target
  23.  
  24. sudo systemctl enable jstimeout@
  25. '''
  26.  
  27. import glob
  28. import os
  29. import struct
  30. import sys
  31. import select
  32. import time
  33. import logging
  34. from datetime import datetime as dt
  35.  
  36. from tendo import singleton
  37.  
  38. logging.basicConfig()
  39. # logging.getLogger().setLevel(logging.ERROR)
  40. logging.getLogger().setLevel(logging.DEBUG)
  41.  
  42. try:
  43. max_idle_time = 10*60
  44. jsid = sys.argv[1]
  45. me = singleton.SingleInstance(flavor_id=jsid)
  46. except IndexError:
  47. logging.error("Missing argument: Bluetooth address")
  48. sys.exit(-1)
  49. except singleton.SingleInstanceException:
  50. sys.exit(-1)
  51.  
  52. # Fetch the newest device for monitoring
  53. files = glob.glob("/dev/input/js*")
  54. if not files:
  55. logging.error("No js device input files found")
  56. sys.exit(0)
  57. files.sort(key=lambda x: os.path.getctime(x))
  58. dev_path = files[-1]
  59. logging.info("Monitoring " + dev_path)
  60.  
  61. file = open(dev_path, "rb")
  62.  
  63. Flag = True
  64. prevtime = dt.now()
  65.  
  66. while True:
  67. currtime = dt.now()
  68. r, w, e = select.select([file], [], [], 0)
  69. if file in r:
  70. print("Activity on " + dev_path)
  71. Flag = True
  72. prevtime = currtime
  73. os.read(file.fileno(), 1024*1024)
  74. else:
  75. if not Flag:
  76. idle = (currtime-prevtime).total_seconds()
  77. print("Idle time: " + str(idle))
  78. if idle >= max_idle_time:
  79. time.sleep(1)
  80. os.system("echo disconnect "+jsid+"| bluetoothctl >/dev/null")
  81. break
  82. else:
  83. print("Idle on " + dev_path)
  84. Flag = False
  85. time.sleep(30)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement