sonic-pi-net / sonic-pi

Code. Music. Live.
https://sonic-pi.net
Other
10.81k stars 921 forks source link

Exception in World_New: Access is denied. #3150

Open TheGreatestJannet opened 2 years ago

TheGreatestJannet commented 2 years ago

I have just updated to Sonic Pi version 4.0.3 on our school network. When loading sonic pi with a non admin user we get the following error. image Students can't enter the sound settings due to restrictions on the network. Is there anyway around this?

samaaron commented 2 years ago

Hi there,

so sorry you're having issues. You mentioned that you have upgraded - which version were you working with before and was that working just fine?

Would it also be possible to obtain and share a copy of all the log files in N:\.sonic-pi\log here in this issue?

TheGreatestJannet commented 2 years ago

The previous issue was this one: https://github.com/sonic-pi-net/sonic-pi/issues/2729. The previous version wasn't working either. Here are the log files: sonic-pi.zip

TheGreatestJannet commented 2 years ago

Creating a shortcut for scsynth.exe makes a window open. This seems like it is able to start. Assuming this is SuperCollider. image

TheGreatestJannet commented 2 years ago

Adding a -u 64344 then fails with an the same error as before. Is it trying to add a windows firewall rule? -t also doesn't work.

TheGreatestJannet commented 2 years ago

Also the app seems to be crashing as well. I assume this is related to not receiving permission: image image

samaaron commented 2 years ago

Interesting, thanks so much for this information @TheGreatestJannet.

In Sonic Pi's case, scsynth.exe will be attempting to open a UDP port so that the language runtime can communicate with it. This port will be localhost only and I've never seen it raise a firewall issue - which typically only seem to get triggered if you attempt to open a port that can be talked to over the network in addition to the local loopback network. Although my knowledge here is a bit hand wavy and you might be able to help correct me.

To get things to behave similarly with scsynth.exe from the command prompt as you are doing, you also need to pass the -B 127.0.0.1 option to specifically tell it to bind to the local loop back address and not 0.0.0.0 which would let it listen on the network (which I believe may even be the default).

Here's the full path that was attempted when starting on your machine:

C:/Program Files/Sonic Pi/app/server/native/scsynth.exe -u 29882 -a 1024 -m 131072 -D 0 -R 0 -l 1 -i 0 -o 16 -b 4096 -B 127.0.0.1 -U C:/Program Files/Sonic Pi/app/server/native/plugins`

Sonic Pi works by multiple processes talking to each other via UDP over the local loopback network. If your firewall somehow prohibits this, then that's likely to be an issue.

Note that we do also open up a UDP port that listens to the network - but only if the user has requested to do so in the GUI preferences. Having this select should and does (at least in my experience) trigger a Windows firewall request to allow this to happen. This is only necessary if you want to receive messages from Sonic Pi instances on different machines - and is not enabled by default.

TheGreatestJannet commented 2 years ago

I'm not sure if it is the firewall or not. The error is not very descriptive. All I know is it only happens when -u or -t is added. Additionally, 29882 is above the root 1024 ports so it shouldn't need administrator access to open. I tried it with just -u 29882 -B 127.0.0.1 but still the same error.

samaaron commented 2 years ago

Yes, it's really rather odd.

The only thing I can suggest at the moment is to download SuperCollider and see if that produces a similar error when you boot the server: https://supercollider.github.io/

If you are able to reproduce this behaviour with regular SuperCollider, then it's probably worth us raising an issue on their repo to see if they might be able to shed any light on this issue.