Menu

28 november 2010

Een Mac op afstand bedienen met PHP

Standaard is iedere Mac voorzien van de Apache webserver. Door deze te gebruiken met PHP en een simpel OS X Terminal commando kan je vanaf een ander netwerk apparaat scripts starten op je Mac. Je kan je Mac dus eigenlijk op afstand bedienen via de ingebouwde webserver.

Dit klinkt misschien allemaal ingewikkeld maar het is redelijk eenvoudig te maken. In deze post leg ik uit hoe je dit kan maken. We activeren de Webserver, laden de PHP5 module en maken een script aan dat het volume van je Mac kan ‘muten’.

Webserver en PHP5 activeren

Open een nieuwe OS X Terminal sessie en type het onderstaande commando om Apache te vertellen dat bij het starten ook de PHP module geladen moeten worden. Standaard is het gebruik van de PHP uitgeschakeld.

sudo nano /private/etc/apache2/httpd.conf

Onderaan de lijst met loadmodules verwijder je de ‘#’ die voor de onderstaande regel staat:

LoadModule php5_module libexec/apache2/libphp5.so

Bewaar de wijziging met ctrl+x, enter en sluit de nano editor af.

Ga naar:  ▸ Systeemvoorkeuren ▸ Delen ▸ optie: Webserver

Stop en herstart de webserver.

In het Webserver-venster wordt aangegeven op welke url je persoonlijke website is terug te vinden in mijn geval is dat http://10.0.0.101/~richard/ dit adres is straks nodig om het php script aan te roepen.

Het PHP script

Nu de webser actief is gaan we het PHP script ‘mute.php’ plaatsen in je persoonlijke webserver map. Het script is vrij eenvoudig het voert door middel van de functie ‘php exec’ een OS X Terminal commando uit. In dit voorbeeld gebruiken we het OS X commando om het geluidsvolume op mute te zetten.

Tevens geven we in het script aan dat we gebruik willen maken van de afbeelding: MuteIcon.png. Door deze regel te gebruiken hebben we een mooi icoon op het springboard staan als we een bookmark maken van de url.

De PHP code:

<html>
<head>
<title>Mute Mac</title>
<link href="MuteIcon.png" rel="apple-touch-icon">
</head>
<body>

<?php exec("osascript -e \"set Volume 0\""); ?>
<h1>Mac Muted!</h1>

</body>
</html>

Beide bestanden kan je hier downloaden: mutemac.zip (253). Unzip het bestand en plaats het php-script en de afbeelding in je thuismap ▸ Webpagina’s.

Nu wordt het tijd om lawaai te gaan maken, start een applicatie de geluid maakt en ga met je iPhone, iPad of ieder andere apparaat met een webbrowser naar de url die wordt aangegeven bij de webserver instellingen. Voeg aan de url mute.php toe, in mijn voorbeeld wordt dit dus:

http://10.0.0.101/~richard/mute.php

Op het moment dat je de url aanroept dan zal je merken dat het geluidsvolume op de Mac direct wordt ‘gemuted’. Geweldig toch?

Nadat de tekst ‘Mac Muted!” in Mobile Safari verschijnt kan je een bookmark met icoon op je springboard plaatsen.

Dit is natuurlijk een heel erg basic voorbeeld maar geeft wel de kracht van de webserver aan. In feite kan je ieder willekeurig commando of script starten op je Mac met behulp van Apache en PHP.

Update:
18:30 Check ook de comments voor een Volume Slider gemaakt door Kees Kluskens!




Gerelateerde tips:




Reacties


  • ThaMan 28 november 2010 om 12:33

    Nice, dit laat toch maar eens weer de oneindige toepassingen zien op een mac. Soms serieus verborgen want zou hier nooit opgekomen zijn.

  • Tim 28 november 2010 om 12:43

    Oh vet! Op deze manier kan je dus as osascript functies uitvoeren die er zijn!

  • Sjoerd 28 november 2010 om 13:27

    Welke achtergrond hebben jullie gebruikt op die iPhone?

  • Emile 28 november 2010 om 13:38

    Let er wel op dat wanneer je scripts wil gebruiken die met applicaties werken die de gebruiker heeft gestart, je de webserver ook als gebruiker moet starten (wat relatief onveilig is).

  • Kees 28 november 2010 om 15:52

    Haha prachtig. Ik heb veel kennis van html, php en javascript en ik ga hier zeker iets leuks mee maken.

    Is er interesse om een uitgebreider script te maken wat er ook mooi uitziet op andere Wi-Fi apparaten (Android, Blackberry enz.)?
    Ik ben van plan dit uit te breiden door bijvoorbeeld een slider te maken zodat je je volume zelfs zo exact kan instellen!

    Op deze manier kun je dus vanaf je luie bank naar muziek luisteren en deze wat harder of zachter zetten.

  • Gerbert 28 november 2010 om 16:35

    Ik wist niet dat PHP standaard in het OSX zit.
    Voor een functie als deze zijn er natuurlijk zat iPhone Apps. Voor andere apparaten of Android toestellen e.d. is dit wel een leuke mogelijkheid om een klein beetje aan domotica te doen.

  • Kees 28 november 2010 om 17:34

    Ik wil even mededelen dat ik mijn script klaar is.
    Richard, wil je dit misschien even in de post plaatsen? Ik denk dat veel mensen hier wat aan hebben.

    Wat mijn script doet:
    Mijn script past het volume aan op basis van een slider, je kan dus in plaats van je volume alleen maar op stil zetten gewoon elk niveau kiezen dat je maar wilt!

    Een niet-werkend voorbeeld is hier te vinden:
    http://keeskluskens.nl/dump/volume_beheer_op_afstand_bron.php

    En het hele script hier:
    http://keeskluskens.nl/dump/volume_beheer_op_afstand.phps

    Om het te laten werken moet je wel nog de hele tutorial die hier staat volgen.

  • Stan 28 november 2010 om 23:42

    @Kees: Leuk idee, maar je kunt zoiets ook prima uitbreiden met Ajax. Dan is alles wat je doet meteen zichtbaar op je Mac en kun je een ware app maken via PHP en JavaScript.

    Bedankt voor de tip, hier ga ik ook zeker mee aan de slag!

  • Bas van der Ploeg 29 november 2010 om 1:14

    Heel tof. Dit ga ik zeker volgen.

  • Piejero 29 november 2010 om 8:38

    Maar dit werkt toch alleen binnen je eigen lokaal netwerk? Want deze ip-adressen waar ke over spreekt zijn toch niet het publiek (niet statische) ip adres dat je toegedeeld krijgt van je ISP? Met andere woorden, bij de meesten gaat dit toch niet out of the box werken?

  • Me 29 november 2010 om 18:02

    Geweldig dat iedereen dit helemaal te gek vindt, het is natuurlijk niets bijzonders en ook nog eens een Major security leak. Je webserver execute rechten geven op je machine is natuurlijk helemaal niet verstandig!

  • Dinge 29 november 2010 om 21:07

    Bij werkt dit niet. Als ik het eerste commando in geef (sudo nano /private/etc/apache2/httpd.conf) dan krijg ik dit: hoe kom ik dit aan het scherm die hierboven afgebeeld is?

  • Dinge 29 november 2010 om 21:08

    Ik krijg dit scherm. Hoe kom ik aan het scherm hierboven?

Een reactie toevoegen: