Checkpoint

master
Kuba Orlik 3 days ago
parent ad6a0b4cd2
commit a56db9263f

2
.gitignore vendored

@ -0,0 +1,2 @@
env
*~

@ -0,0 +1 @@
export SUSPEND_SECRET=some-password

@ -0,0 +1,21 @@
#!/bin/bash
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
echo $SCRIPT_DIR
sudo tee /etc/systemd/system/game-runner.service <<EOF
[Unit]
Description=Game runner http server. Listens on http://192.168.1.140:8111/?game=kodi and runs a game
After=network.target
[Service]
ExecStart=/usr/bin/python3 $SCRIPT_DIR/game-runner.py
WorkingDirectory=/home/kuba/
Restart=on-failure
RestartSec=5
User=kuba
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
EOF

@ -0,0 +1 @@
kuba@bazzite.6047:1784385156

@ -0,0 +1,88 @@
from evdev import UInput, ecodes as e
import time
# Create virtual keyboard
ui = UInput({
e.EV_KEY: [getattr(e, f"KEY_{chr(c).upper()}") for c in range(ord('a'), ord('z')+1)] + [e.KEY_SPACE, e.KEY_UP, e.KEY_DOWN, e.KEY_LEFT, e.KEY_RIGHT, e.KEY_LEFTSHIFT, e.KEY_TAB, e.KEY_ENTER]
}, name="virtual-keyboard")
def press(key):
ui.write(e.EV_KEY, key, 1) # key down
ui.write(e.EV_KEY, key, 0) # key up
ui.syn()
def home():
print("Sending shift+tab")
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1) # Press Ctrl
ui.write(e.EV_KEY, e.KEY_TAB, 1) # Press 1
ui.syn()
time.sleep(0.1)
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 0) # Release 1
ui.write(e.EV_KEY, e.KEY_TAB, 0) # Release Ctrl
ui.syn()
def type_string(text):
for ch in text:
if ch == ' ':
press(e.KEY_SPACE)
elif 'a' <= ch <= 'z':
key = getattr(e, f"KEY_{ch.upper()}")
press(key)
else:
# ignore unsupported characters
continue
time.sleep(0.01)
def run_a_game(name):
home()
press(e.KEY_LEFT)
press(e.KEY_LEFT)
press(e.KEY_DOWN)
press(e.KEY_ENTER)
time.sleep(0.3)
press(e.KEY_UP)
press(e.KEY_UP)
press(e.KEY_LEFT)
press(e.KEY_LEFT)
press(e.KEY_LEFT)
press(e.KEY_LEFT)
time.sleep(0.1)
type_string(name.lower())
time.sleep(0.3)
press(e.KEY_DOWN)
press(e.KEY_DOWN)
press(e.KEY_ENTER)
time.sleep(0.2)
press(e.KEY_ENTER)
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
# Parse URL
parsed = urlparse(self.path)
query = parse_qs(parsed.query)
# Get parameter (e.g. ?=hello)
msg = query.get("game", [""])[0]
print(f"Received msg: {msg}")
run_a_game(msg)
# Send response
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(f"OK: {msg}".encode())
# Start server
port = 8111
server = HTTPServer(("0.0.0.0", port), Handler)
print(f"Listening on http://0.0.0.0:{port}")
server.serve_forever()

@ -0,0 +1,21 @@
#!/bin/bash
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
echo $SCRIPT_DIR
sudo tee /etc/systemd/system/game-runner.service <<EOF
[Unit]
Description=Game runner http server. Listens on http://192.168.1.140:8111/?game=kodi and runs a game
After=network.target
[Service]
ExecStart=/usr/bin/python3 $SCRIPT_DIR/game-runner.py
WorkingDirectory=/home/kuba/
Restart=on-failure
RestartSec=5
User=kuba
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
EOF

@ -3,5 +3,8 @@
set -e set -e
set -o xtrace set -o xtrace
source env
./cec-remote/setup.sh ./cec-remote/setup.sh
./g534-sink-switcher/setup.sh ./g534-sink-switcher/setup.sh
./game-runner/setup.sh

@ -0,0 +1,33 @@
#!/usr/bin/env node
import http from "http";
import { exec } from 'child_process';
const PORT = 4321;
const SECRET = process.env.SUSPEND_SECRET || 'hushhush';
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/suspend') {
let body = '';
req.on('data', chunk => body += chunk);
req.on('end', () => {
if (body === SECRET) {
exec('systemctl suspend', (err, stdout, stderr) => {
if (err) {
console.error('Suspend failed:', stderr);
return res.writeHead(500).end('error');
}
console.log('Suspending now');
res.writeHead(200).end('ok');
});
} else {
res.writeHead(403).end('forbidden');
}
});
} else {
res.writeHead(404).end('not found');
}
});
server.listen(PORT, () => {
console.log(`Suspend-server listening on port ${PORT}`);
});

@ -0,0 +1,20 @@
#!/bin/bash
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
echo $SCRIPT_DIR
sudo tee /etc/systemd/system/suspend-listener.service <<EOF
[Unit]
Description=Remote Suspend HTTP Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node $SCRIPT_DIR/index.mjs
User=root
Environment=SUSPEND_SECRET=$SUSPEND_SECRET
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Loading…
Cancel
Save