Skip to content

computer-wilco/laptoplock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laptoplock

Laptoplock is een eenvoudige tool waarmee ouders op afstand het apparaat van hun kind kunnen vergrendelen. Handig voor bijvoorbeeld huiswerktijd of het stellen van digitale grenzen.

De software draait op de laptop van het kind, en via een ouderinterface kunnen opdrachten verstuurd worden om het apparaat te vergrendelen/ontgrendelen.


Installatie

Installeer Laptoplock op het apparaat dat u wilt kunnen vergrendelen. Voor de meeste commands hier hebt u sudo nodig, hou daar rekening mee.

wget https://raw.githubusercontent.com/computer-wilco/laptoplock/master/INSTALL/laptoplock_1.0.0_amd64.deb
sudo apt deb laptoplock_1.0.0_amd64.deb
rm laptoplock_1.0.0_amd64.deb
laptoplock install

Let op! De .deb file uit de release v1.0.0 klopt niet helemaal. Pak daarom die deze: https://raw.githubusercontent.com/computer-wilco/laptoplock/master/INSTALL/laptoplock_1.0.0_amd64.deb. Er wordt hard gewerkt aan ondersteuning voor Windows, MacOS en andere versies van Linux, maar momenteel werkt het alleen nog op Debian-gebaseerde Linux versies.

Wanneer u het gewoon even wilt uitzetten of verwijderen:

laptoplock uninstall

Als u niet wilt dat u kind dit command uitvoert kun u dit uitvoeren:

sudo apt remove laptoplock

Verder staan er op deze cli ook nog deze commando's:

laptoplock start
laptoplock stop
laptoplock restart
laptoplock status
laptoplock logs

Configuratie

Let er wel op dat u ook een ouderpagina nodig zult hebben. Hier een voorbeelden: Zo zou de ouderpagina eruit kunnen zien:

<!DOCTYPE html>
<html lang="nl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vergrendel Instellingen</title>
    <script src="/socket.io/socket.io.js"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0fdf4;
            color: #333;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .container {
            background: #ffffff;
            padding: 20px 30px;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
            text-align: center;
            max-width: 400px;
            width: 100%;
        }

        h1 {
            color: #38a169;
            font-size: 24px;
            margin-bottom: 15px;
        }

        p {
            font-size: 16px;
            margin-bottom: 20px;
            line-height: 1.5;
        }

        label {
            font-size: 18px;
            display: flex;
            justify-content: center;
            align-items: center;
            gap: 10px;
            margin-bottom: 15px;
        }

        input {
            font-size: 16px;
            padding: 5px;
        }

        #lockToggle {
            width: 24px;
            height: 24px;
            cursor: pointer;
        }

        #statusMessage {
            font-size: 16px;
            font-weight: bold;
            color: #38a169;
        }

        button {
            background-color: #38a169;
            color: white;
            border: none;
            padding: 10px 15px;
            font-size: 16px;
            cursor: pointer;
            border-radius: 5px;
            margin-top: 10px;
        }

        button:hover {
            background-color: #2e7d32;
        }

        .footer {
            margin-top: 20px;
            font-size: 12px;
            color: #666;
        }

        .ronde-knop {
            position: fixed;
            top: 20px;
            right: 20px;
            padding: 20px 30px;
            background-color: #388e3c;
            border-radius: 50px;
            z-index: 1000;
            color: white;
            font-size: 16px;
            text-align: center;
            text-decoration: none;
            font-family: Arial, sans-serif;
        }

        .ronde-knop:hover {
            background-color: #2e7d32;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Hallo Ouders!</h1>
        <p>Hier kan je mijn laptop vergrendelen of ontgrendelen door het vinkje hieronder te gebruiken.</p>

        <label>
            Vergrendeld:
            <input type="checkbox" id="lockToggle">
        </label>

        <p id="statusMessage"></p>

        <div class="footer">© 2025 Wilco Joosen. Alle rechten voorbehouden.</div>
    </div>

    <a href="/laptop/logout/" class="ronde-knop">Logout</a>

    <script>
        const socket = io();
        const lockToggle = document.getElementById('lockToggle');
        const statusMessage = document.getElementById('statusMessage');
        let currentStatus = false;

        socket.on('connect', () => {
            socket.emit('getStatus');
        });

        socket.on('status', (data) => {
            currentStatus = data.locked;
            lockToggle.checked = currentStatus;
            statusMessage.textContent = currentStatus ? 'Apparaat is vergrendeld' : 'Apparaat is ontgrendeld';
        });

        lockToggle.addEventListener('change', (e) => {
            const newStatus = e.target.checked;
            socket.emit('setStatus', { locked: newStatus });
        });
    </script>
</body>
</html>

Al moet er dan wel een stukje socket.io in het hoofdbestand staan:

io.on("connection", (socket) => {
    const status = readStatus();
    socket.emit("status", status);

    socket.on("getStatus", () => {
        const status = readStatus();
        socket.emit("status", status);
    });

    socket.on("setStatus", (data) => {
        const { locked } = data;
        if (typeof locked !== "boolean") return;

        writeStatus({ locked });
        io.emit("status", { locked });
    });
});

Er moet ook nog autenticatie in en alles natuurlijk, maar daar bent u vrij in.

Licentie

Dit project staat volledig op de Apache 2.0 Licensie.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published