Blog

Mirroring iPad/iPhone screen on Linux

Last updated March 8th 2021

As a professor in this pandemic days the first issue I faced while I was looking for a good setup to give my classes remotely was: how to mirror the screen of my iPad on Linux?

Currently, I’m using elementaryOS 5, which is based on Ubuntu 18.04, so this tutorial should work on any Ubuntu 18.04 (or later) based distribution.

Installing packages needed

Type the following commands on the Terminal:

sudo apt-get install cmake
sudo apt-get install libssl-dev libavahi-compat-libdnssd-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav
sudo apt-get install gstreamer1.0-vaapi (For Intel graphics - this is not part of the command, ok?)

Installing UxPlay on Linux

  1. Download UxPlay zip file (if the link doesn’t work you can clone the git repository visiting https://github.com/antimof/UxPlay)
  2. Extract the files
  3. In the Terminal enter the UxPlay’s directory created after the extraction of the Zip file (it should be UxPlay-master)
  4. Type the commands below
mkdir build
cd build
cmake ..
make

Using the UxPlay

Before you try to mirror be sure of two things:

  1. All your devices are accessing the same network
  2. Your iPad/iPhone is connected to 5Ghz WiFi connection

If everything went fine up to this point do:
On your computer. in the build directory type in the Terminal

./uxplay

On your iPad/iPhone: go to the control center -> Screen Mirroring -> UxPlay

Known Issues and Solutions

I’ve made a tutorial with solutions to the most common problems here. It’s been helping a lot of other users, so there is a high chance you can find the solution to your problem there. Read it if you are facing any problem.

Screenshots

60 comments

  1. I get this warning: Initialized server socket(s)
    *** WARNING *** The program ‘uxplay’ uses the Apple Bonjour compatibility layer of Avahi.
    *** WARNING *** Please fix your application to use the native API of Avahi!
    *** WARNING *** For more information see

    And an error on the iPad saying “Unable to connect to UxPly”. It sees UxPlay in the list of mirrors, but it’s not working. Any ideas ?

    I’m running Ubuntu 20.04

    Like

      1. Nothing can be done about the warning. The developers has to use this layer of compatibility. And the warning can be ignored.

        Try to install the gstreamer without the vaapi. In the tutorial I put the command for installing gstreamer for intel graphics, in your case you should use just `sudo apt-get install gstreamer1.0`

        Like

  2. cmaker da el siguiente error.

    The CXX compiler identification is unknown
    CMake Error at CMakeLists.txt:3 (project):
    No CMAKE_CXX_COMPILER could be found.

    Tell CMake where to find the compiler by setting either the environment
    variable “CXX” or the CMake cache entry CMAKE_CXX_COMPILER to the full path
    to the compiler, or to the compiler name if it is in the PATH.

    Like

  3. so I want to make it so that it can launch on start up. I also want to make then when i exit out of the screenshare that it doesn’t kill the command. I notice that after i stop sharing my iphone. the screen stays on. once i exit out. uxplay no longer shows in my screen mirror options.

    Like

    1. I noticed the same issue here (my « remote » laptop is running Ubuntu, connected to TV screen. So when I stop the screen sharing on iPad/macOS, I end up with a static Uxplay window taking all the screen).

      The ideal behaviour would be the UI window to close itself on Ubuntu client, when user stops screen sharing + open itself again when a new screen sharing is activated.

      Like

  4. I have been a bit brutal, but got it to work on Ubuntu 20.04.1 LTS:

    “`
    apt search libspa | grep ‘^gstreamer’|awk -F ‘/’ ‘{print “apt install “$1}’ > /tmp/prout
    apt search libspa | grep ‘^libspa’|awk -F ‘/’ ‘{print “apt install “$1}’ > /tmp/meh
    chmod +x /tmp/prout
    chmod +x /tmp/meh
    /tmp/prout
    /tmp/meh
    “`

    A bit dirty, I probably got useless stuff installed, but it works.

    Like

  5. Hi Rodrigo,

    Thanks very much for this!

    I go this to work on Ubuntu 20.04.

    I got the timeout issues as reported above because I forgot to switch back from NVIDIA to Intel graphics card.

    I also used:

    apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

    from here:https://github.com/FD-/RPiPlay/pull/146

    and then rebuilt.

    Works fine now!

    Hope this helps,
    Rory

    Like

  6. I was looking for such a solutions since weeks… Months!!! I had almost lost any hope!!! Thank you very much!!!

    I am a teacher in a school in Germany where a project about using iPads in the classes is being implemented… Unfortunately the whole school is of course using only computers with Windows 😦 I am almost the only one who uses Linux in his laptop!

    In these days of home schooling the importance of these devices has grown considerably and I was going everyday to school in order to mirror my iPad screen on the computers of the school and from there to conference with my classes (the use of the iPad is much convenient because of the e-pencil). Now I can stay home and proudly conference from there with my laptop with Linux: Great!!!! Thank you again from the bottom of my heart!

    Nicola Staffolani, Backnang, Germany

    Like

    1. Thank you for the nice comment I totally understand your frustration and it was that kind of feeling that led me to look for a real solution.

      I tried a Samsung Galaxy Tab and mirroring it on linux is trivial with Scrpy and the e-pencil is even better than the one made by Apple. If you have a change to try Android tablets with linux… Mirroring them is less painful than Apple devices…

      Like

  7. hello, i dosent work for me due to some reason, help me,
    this is what it shows:
    raop_rtp_mirror starting mirroring
    Segmentation fault (core dumped)

    Like

      1. I just did it on my Notebook, on which it works just perfect.
        I am running the same software (elementory os 5.1.7)
        So it has something to do with the hardware right? Could it be the graphics card (GTX 970)? Or the fact that I am using two monitors?

        Like

  8. Hey! This is actually a life saver, I need to be able to share my ipad screen over zoom for a physics class I’m taking in college and I have ubuntu installed on my computer, so this was the perfect solution. I found that when I use my school’s wifi UxPlay doesn’t seem to pop up in the screen mirroring options, however it does work perfectly fine when using other wifi and even my phone hotspot. Does this have something to do with my school’s wifi settings or is it due to an unstable connection? Is there a way around this by any chance, either with bluetooth or something else? So far, I’ve just been using my hotspot when in school, but I’d rather not have to do that. Thank you again for this!

    Like

  9. Hi Rodrigo,
    I got the same problem as the first comment by Werner Kruger, though I have intel…
    specs: 16Gb RAM, Intel® Core™ i5-1035G1 CPU @ 1.00GHz × 8, Mesa Intel® UHD Graphics (ICL GT1), Ubuntu 20.04.2 LTS, 64-bit

    I can even connect to UxPlay, but shortly get in the terminal raop_ntp receive timeout and no screen is mirrored on my computer…
    Do you have an idea how to fix this?

    Like

      1. Actually not because I could not identify my problem with any of the issues described in that post, even though I thought the zoom fix might come in handy once it is working at all 🙂
        I really have little knowledge in any of this, do you think your solution on “NVIDIA Graphics card” could be helpful?

        Like

      2. So, there is another project with the same purpose as UxPlay whose development has been more active these days. It’s called RPi Play you can check it here https://github.com/FD-/RPiPlay

        In your case, I would try to install the gstreamer plugins I mentioned in the common problems post. If that doesn’t work, then I would try RPiPlay. The process of compilation and installation is essentially the same you did for UxPlay. Let me how it goes

        Like

  10. Hi and thanks for your work. I’m having an issue after all is set and done, can you please take a look and tell me
    I’m getting this error, what’s wrong? Thanks is advance.

    lib/libairplay.a(crypto.c.o): In function `sha_destroy’:
    /home/linux/Downloads/UxPlay-master/lib/crypto.c:206: undefined reference to `EVP_MD_CTX_free’
    collect2: error: ld returned 1 exit status
    CMakeFiles/uxplay.dir/build.make:101: recipe for target ‘uxplay’ failed
    make[2]: *** [uxplay] Error 1
    CMakeFiles/Makefile2:72: recipe for target ‘CMakeFiles/uxplay.dir/all’ failed
    make[1]: *** [CMakeFiles/uxplay.dir/all] Error 2
    Makefile:127: recipe for target ‘all’ failed
    make: *** [all] Error 2

    Like

  11. Hi, Rodrigo. I would find this super helpful for studying, but somehow I am getting:

    /home/s/UxPlay-master/lib/crypto.c:98: undefined reference to `EVP_CIPHER_CTX_reset’
    lib/libairplay.a(crypto.c.o): In function `sha_init’:
    /home/s/UxPlay-master/lib/crypto.c:175: undefined reference to `EVP_MD_CTX_new’
    lib/libairplay.a(crypto.c.o): In function `sha_reset’:
    /home/s/UxPlay-master/lib/crypto.c:197: undefined reference to `EVP_MD_CTX_reset’
    lib/libairplay.a(crypto.c.o): In function `sha_destroy’:
    /home/s/UxPlay-master/lib/crypto.c:206: undefined reference to `EVP_MD_CTX_free’

    I have followed all the instructions but it is on the liking when I get this error.

    do you have any idea?

    Thanks 🙂

    Like

  12. So I’ve installed this on Feroda and it compiles just fine, but when I run ./uxplay what exactly is supposed to happen? I just get the warning about using the Bonjour compatibility layer and then it waits. Is some window supposed to pop up?

    I can connect from an ipad and the program says it accepts the connection but I don’t get anything except the command line terminal output.

    Like

  13. Thank you. It works perfectly fine until yesterday. A popup with message “cannot connect to UxPlayer” has shown but i dont know why. I have change my modem wifi recently, my computer and ipad connect to the new wifi.

    Like

      1. It definitely because of the firewall. I have disabled the firewall on my machine and it works again. Thank you very much.

        Like

  14. Thanks Rodrigo for providing this page.
    @Becks I got the same errors as you. We both have a Linux version that is too old. UxPlay uses libssl1.1, while my Linux (a derivative of Ubuntu 16.04) offers only libssl1.0.

    Like

  15. I am a brazilian professor and the best I could did until now was to mirror the screen of an Tab S6 lite in my Linux Mint. I have an iPad 6th and I use the app Goodnotes which is much better than any similar app for android (my opinion). Your tip is gonna help me a lot. It worked perfectly here. Thank you very much. Oxe acabei de ver aqui que vc é br também. Sou prof (substituto/temporário) na UECE no Ceará e faço doc em matemática também (teoria de singularidades). Obrigado, professor!

    Like

  16. Excelente!!!

    Funciona muy bien en Ubuntu 20.04
    PC: CPU: Ryzen 5 3600 y GPU Amd rx580

    add:
    apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

    Gracias…

    Like

  17. I follow the instructions step by step

    it only says:
    raop_rtp_mirror starting mirroring

    but nothing happen, I can see the phone screen on the laptop

    I’m using Ubuntu 20.04.3 btw

    Like

  18. Thank you professor. It is amazing. i had raop_ntp receive timeout error and
    sudo apt-get install gstreamer1.0-plugins-bad
    fixed everything. many thanks

    Like

  19. Hi Rodrigo. I followed all the instructions but when I use the command “./uxplay” no window is popping up on my screen. I am able to select “uxplay” in the screen mirroring devices list on my iPad, but given no window is popping up on my laptop screen I am not able to see my iPad screen. Do you know what is the problem?
    Thank you very much!

    Like

  20. I have the following error when running cmake:
    make[1]: *** [CMakeFiles/cmTC_7e0fe.dir/build.make:66: CMakeFiles/cmTC_7e0fe.dir/BSD.c.o] Error 1
    make[1]: se sale del directorio ‘/home/brian/UxPlay/build/CMakeFiles/CMakeTmp’
    make: *** [Makefile:121: cmTC_7e0fe/fast] Error 2

    Like

  21. hi, first of all thanks.

    second, i get this ERROR:

    CMake Error at lib/CMakeLists.txt:137 (message):
    libdns_sd missing; can be provided by avahi_compat-libdns_sd or
    mDNSResponder.

    CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
    Please set them or make sure they are set and tested correctly in the CMake files:
    LIBPLIST
    linked by target “airplay” in directory /home/billy/UxPlay-master/lib

    any ideas?
    thank you

    Like

Leave a comment