Skip to main content
Skip table of contents

Testing Linux App Locally Using Epic’s Signaling Server

Before uploading your Linux-packaged Unreal app to the Eagle 3D Streaming platform, it's important to verify that it runs smoothly in a Pixel Streaming environment. This guide will walk you through testing your app locally using Epic’s Pixel Streaming Signaling Server.

Important Note

  • These steps must be performed on a Linux machine.

  • Ensure your Unreal project has the Pixel Streaming plugin enabled.

  • The app should already be packaged for Linux.

Follow the steps below:

Step 1. Navigate to the WebServers Folder

Go to: [Your App Folder] → Samples → PixelStreaming → WebServers

image-20250806-041340.png

Figure 1. Navigate to WebServers Folder

Step 2. Open Terminal in the WebServers Directory

Step 3. Make the Script Executable

Run the following command:

BASH
chmod a+x get_ps_servers.sh

image-20250806-041722.png

Figure 2. Running chmod

Step 4. Run the shell command :

CODE
./get_ps_servers.sh

If you see an error like “No such file or directory,” proceed to Step 5. Else go to Step 10.

image-20250806-042035.png

Figure 3. No Such Directory

Step 5. Check if curl is Installed

Run:

CODE
which curl 

image-20250806-042448.png

Figure 4. Checking curl

If there’s no output, install curl in the next step.

Step 6. Install curl

Run:

CODE
sudo apt-get install --reinstall curl 

You may be prompted for your password.

image-20250806-042648.png

Figure 5. Installing curl

image-20250806-042836.png

Figure 6. curl Installed

Step 7. Retry the command

Re-run the following:

CODE
chmod a+x get_ps_servers.sh
CODE
./get_ps_servers.sh

If it still fails, proceed to Step 8.

image-20250806-043206.png

Figure 7. No Such File or Directory

Step 8. Convert command to UNIX Format

Run:

CODE
dos2unix get_ps_servers.sh

image-20250806-043425.png

Figure 8. Converting to UNIX Format

Step 9. Run the command Again

CODE
chmod a+x get_ps_servers.sh
CODE
./get_ps_servers.sh

You should now see folders like SignalingWebServer, SFU, etc.

image-20250806-043837.png

Figure 9. Some Files & Folders are Downloaded

Step 10. Navigate to bash folder

Go to:

SignalingWebServer → platform_scripts → bash

image-20250806-044214.png

Figure 10. Navigate to bash Folder

Start 11. Open Terminal in Bash Folder

image-20250806-044353.png

Figure 11. Open in Terminal

Step 12. Start the Signaling Server

In the terminal, run:

CODE
./run_local.sh

You may be prompted for your password again.

Leave this terminal window open. Do not close it while testing your app.

image-20250806-044706.png

Figure 12. Start the Signaling Server

image-20250806-044932.png

Figure 13. Signaling Server Running

Step 13. Open App Root Folder in Terminal

Root folder is the folder containing your Engine folder and .sh app script.

image-20250806-045319.png

Figure 14. Open Root Folder in a Terminal

Step 14. Create a new .sh file

Create a new file using the command below. (Use any name you want. Here we used HojatLinxPrjct2.sh)

Run:

CODE
vim GiveNewFileName.sh

image-20250806-045822.png

Figure 15. Create a New .sh File

A new blank file will open in the terminal where you can paste the script.

image-20250806-045929.png

Figure 16. Created New File

Step 15. Build the script

Below is the script. You’ll need to modify the red-highlighted paths to match your actual app folder structure:

#!/bin/sh
UE_TRUE_SCRIPT_NAME=$(echo "$0" | xargs readlink -f)
UE_PROJECT_ROOT=$(dirname "$UE_TRUE_SCRIPT_NAME")
chmod +x "$UE_PROJECT_ROOT/HojatLinxPrjct/Binaries/Linux/HojatLinxPrjct"

"$UE_PROJECT_ROOT/HojatLinxPrjct/Binaries/Linux/HojatLinxPrjct" HojatLinxPrjct \
-log -AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888 -RenderOffScreen "$@"

In our case the file location is showing here

image-20250806-051207.png

Figure 17. Create Script Based on Linux File Location

We’ve included the script again below so you can copy it easily.

CODE
#!/bin/sh
UE_TRUE_SCRIPT_NAME=$(echo "$0" | xargs readlink -f)
UE_PROJECT_ROOT=$(dirname "$UE_TRUE_SCRIPT_NAME")
chmod +x "$UE_PROJECT_ROOT/HojatLinxPrjct/Binaries/Linux/HojatLinxPrjct"

"$UE_PROJECT_ROOT/HojatLinxPrjct/Binaries/Linux/HojatLinxPrjct" HojatLinxPrjct \
-log -AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888 -RenderOffScreen "$@"

Step 16. Pass the script in the terminal of new file that you have created on step 14

Add a warning not to press enter

image-20250806-050158.png

Figure 18. Passing the Script


Step 17. After pasting the script, press : then type wq and press Enter.

CODE
:wq
image-20250806-052452.png

Figure 19. Type :wq and Press Enter Key

Step 18. Check newly created file

Run:

CODE
dir 
image-20250806-052951.png

Figure 20. Newly Created File

Step 19. Make the Script Executable

Run:

CODE
chmod a+x YourNewlyCreatedFile.sh

You should use your newly created file name instead of YourNewlyCreatedFile.sh.

In our case the newly created file name is HojatLinxPrjc2.sh. So we used this name

image-20250806-053433.png

Figure 21. Make the Script Executable


Step 20. Start the App

Run:

CODE
./YourNewlyCreatedFile.sh.

You should use your newly created file name instead of YourNewlyCreatedFile.sh.

In our case the newly created file name is HojatLinxPrjc2.sh. So we used this name.

image-20250806-053811.png

Figure 22. Run the App

You may need to give password. Give it.

image-20250806-053933.png

Figure 23. App is Started

Step 21. Launch the App in Browser

  1. On the same Linux computer, go to your browser and visit:

CODE
localhost

  1. Click on “CLICK TO START” to launch the app.

image-20250806-054103.png

Figure 24. Click to Start

You should see your app streaming locally.

image-20250806-054256.png

Figure 25. App is Running

🌐 Remote Testing Option

You can also test remotely under the same network by:

  1. Getting the PC’s IP Address:

CODE
hostname -I 

  1. Enter that IP in a browser from another device:

CODE
http://<your-ip-address>

Note: For testing outside the network (different Wi-Fi), a static IP is required.
(A full remote setup guide is coming soon.)

 


Need help?

🛠️ Contact our Support Team

💬 Join the Community on Discord

🆓 Get Started for free

 

Follow us on:

Facebook | GitHub | LinkedIn | YouTube

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.