Comments (59)
Progress. :)
from remotely.
I am willing to put a bounty and pay towards this functionality.
from remotely.
Hah. I found one of the problems. I'm a dork. I used the reverse unary operator for checking for an existing UUID.
from remotely.
I won't be working on any new features for Remotely. It's mostly in maintenance mode right now.
from remotely.
@Trouble123 I'm looking for work over and above what I have now. Obviously, bringing in some money will allow me to prioritize this project way above where it is now. We can chat if you'd like.
from remotely.
I've purchased a Mac Mini that should be on the way soon. Once I'm done with the rewrite to Blazor, I'm going to start working on this.
As for the new Apple Silicon chip, Microsoft plans to support it in the next release of .NET. Progress for that is being tracked here: dotnet/runtime#43313
from remotely.
@stevesobol My first task is going to be the main service, so feel free to get a head start on the remote control if you'd like.
The way I'm doing remote control is probably different from what other products are doing. I'm not using an actual video encoder, as I haven't found a viable cross-platform solution for C#/.NET. I may end up having to write my own C# wrapper around libvpx or something. Or if Microsoft ends up making their WebRTC library cross-platform, I could use that.
(As an addendum to the above, the "Stream Mode" does use actual video encoding from the Microsoft WebRTC library. But it's Windows-only and only works via WebRTC.)
Anyhow, I'm just taking screen grabs and diffing the images myself in Remotely.Desktop.Core.Services.ScreenCaster
. The ScreenCaster
class retrieves a transient Viewer
from the DI container, which has an injected IScreenCapturer
service. Each OS needs their own implementation of IScreenCapturer
(e.g. ScreenCapturerWin
and ScreenCapturerLinux
).
Well, all of the interfaces in Remotely.Desktop.Core.Interfaces
need a Mac implementation registered in the DI container.
My plan was to change Remotely.Desktop.Linux
to Remotely.Desktop.Unix
and have it support both Linux and Mac. The UI framework (Avalonia UI) is cross-platform. The Windows client is WPF, which is Windows-only. Eventually all these will be merged into one UI project using MAIU. Probably in .NET 6, if it's ready.
I need to move the start-up logic from Desktop.Linux.Program.Main
into App.xaml.cs
. The way the UI thread is currently managed doesn't work in Mac. I might have to do this part, as there are some specific things I wanted to change, and there will probably be some trial-and-error until I got it how I want.
In the BuildServices
method, I'd check whether its running on Linux or Mac and register the platform-specific services.
I haven't looked very far into what native libraries I need to use to capture the screen, simulate input, access the clipboard. etc. I had this bookmarked as a place to start looking at hooking into input events: https://developer.apple.com/documentation/coregraphics/quartz_event_services
from remotely.
from remotely.
I was able get the installation going by downloading the sources and the taking the ZIP file from /Remotely_Server_Linux-x64/wwwroot/Content
Putting the file into
/usr/local/bin/Remotely/
did not work but putting it in the download folder next to the script worked when I changed the line 74 to
unzip -o ./Remotely-MacOS-x64.zip -d $InstallDir
Unfortunately the damon would still not start and throw this error
sudo /usr/local/bin/dotnet /usr/local/bin/Remotely/Remotely_Agent.dll
Error writing log entry: Operation is not supported on this platform.
Unhandled exception. System.InvalidOperationException: Unable to resolve service for type 'Remotely.Shared.Services.IElevationDetector' while attempting to activate 'Remotely.Agent.Services.CpuUtilizationSampler'.
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Remotely.Agent.Program.<>c.<RegisterServices>b__2_1(IServiceProvider services) in /Users/runner/work/1/s/Agent/Program.cs:line 95
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Remotely.Agent.Program.Main(String[] args) in /Users/runner/work/1/s/Agent/Program.cs:line 37
at Remotely.Agent.Program.<Main>(String[] args)
zsh: abort sudo /usr/local/bin/dotnet /usr/local/bin/Remotely/Remotely_Agent.dll
from remotely.
I'd love to get a Mac client working. Unfortunately, I don't have a Mac, so I can't even begin working on it.
If anyone would like to work on this, the Mac client will need to implement ICapturer and IKeyboardMouseInput, following examples from the ScreenCast.Win and Linux projects.
from remotely.
I have a MacBook Mini 2011 that I can give you access to if it would help.
from remotely.
Hi @jay-rad,
I noticed you took the maintenance mode note off the readme and have been making some updates recently. Just wondering the status of the project and if you intend on continuing development. It's an awesome project and you've put some great work into it. Thank you!
Posting here because I am also interested in macOS support. If you are going to put more time into the project, is this something potentially worth re-opening?
from remotely.
Hey @lucent-sea, just following up to see if there are any updates on this?
from remotely.
@lucent-sea @edcous I have a late 2012 Mac Mini running Catalina. I already use it as my mobile dev machine, and it has Xcode on it and I can put Visual Studio on it too. I just need some available bandwidth to get started. At the moment, time is something I do not have. I personally would love to see Mac support and although I'm not a Mac guru, I am happy to help where I can, when I can.
from remotely.
@ryanblenis I am definitely interested in supporting macOS. Supporting Intel Macs would be something I can work on immediately. When the new ARM-powered Macs come out, though, I'm going to have to save up some pennies for a new machine (which I need to do anyhow, since my current Mini is 7 years old, but I'm investing in an SSD for the mini, first).
from remotely.
Unfortunately, I'm currently lacking both a Mac and available time.
from remotely.
+1
from remotely.
@lucent-sea If you even want to dabble; not promising that there ever be a product; I could easily spin you up a fast VM of Catalina on my self-hosted proxmox server (you'd have the only password); and/or I could send you a slightly antiquated (but runs latest OS) macbook that you could wipe and keep... I'm way too huge a fan of your work. seriously, just reach out because there are techs out here who would gladly give just to make it easier for you. Remotely beats Connectwise in my opinion with it's support for powershell scripts and a tight inclusion I have with it and Zabbix... Keep up the great work! (or Thank you for showing just what can be done as an alternative to the MSP smashup.
from remotely.
@Fimeg I have a Mac mini. I'm planning on buying an M1-powered Mini when I have time and money -- HEY! Stop laughing -- but my current Mac mini is a late-2012 model with a Core i7. Remotely simply ROCKS, I want to start using it to support my own clients (using Connectwise right now, and it's great, but has some serious shortcomings regarding branding) and as part of that process, I really want to make a Mac port (ok, technically, an addition to the existing codebase) work.
I can devote time to the project, although not a ton - but my biggest hurdle is figuring out screen capture on the Mac. Oddly, I've looked at some of the VNC projects on Github - TigerVNC is one of the VNC servers that run on macOS, but I don't see any actual Mac-specific code (other than a couple conditionals in one of the Makefiles that link the code against some Cocoa libraries).
from remotely.
My guess is that VNC servers on Macs use X. So maybe I can get things working with XQuartz, since X doesn't ship with newer versions of macOS.
That leads me to wonder if/how we can get things working with M1-powered Macs. XQuartz's last major release is over four years old.
from remotely.
@stevesobol I think you're on the right track. I admit that a MacOS client would be incredibly slick; however it's not required in my own personal workflow. I can open an RDP from a server with Remotely/Connectwise on it; and Zabbix is what I use for scripting anyway on that platform.
If I can assist in this venture, I will. Yet I too have 3 startups, a full-time job along with wife and kids,
from remotely.
Would it be cool if I asked you for that VM you were talking about?
I'm trying to minimize my use of my current Mini until I can replace the almost-nine-year-old hard drive with an SSD (hopefully very soon). I'm not going to be able to avoid using it altogether because I just accepted a new project that has me creating an iOS app. :)
from remotely.
While I absolutely could; the vital need I think is negated because you do have a mac mini; provide me with a form of contact for us and I'll either ship you an SSD or send you the funds. -- If you would still prefer to endure the occasional latency from my 40MB upload limit (per second) then I will spin up an Catalina VM on my server. Again, we need to communicate on another medium to provide credentials.
find me on reddit? /u/Fimeg
from remotely.
Let's hold off on that SSD for now.
If you're going to send it to me, I want to use it to work on the project, and I'm not ready to start the work. Incidentally, which hypervisor are you using?
from remotely.
Proxmox; if you message me on reddit I'll be more comfortable sharing in-depth.
from remotely.
Done; look for a message from /u/stevesobol.
from remotely.
from remotely.
@lucent-sea I've been trying to figure out how other remote-control products work on the Mac. I'm not clear on that yet. But I'd like to work on this with you.
I just upgraded to a blazing-fast SSD with a fresh install of Catalina, so I'm eager to make good use of the mini.
from remotely.
superb
from remotely.
Progress. :)
Sweet.. awesome work and skill Sir..
from remotely.
In case anyone missed it, there's now an installer for macOS x64. If anyone wants to try recompiling it for arm64 and seeing if it works on M1, that'd be cool. :)
from remotely.
I'm probably missing something but the installer errors out for me on 10.14.6. I get a "139: Service cannot presently execute". What am I missing? Didn't see instructions anywhere so if I'm missing them I'm sorry.
I found the files location in /usr/local/bin/Remotely and looked inside the ConnectionInfo.json... it has the right URL and ORGID but does not have a device ID assigned or ServerVerificationToken.
How can I get those or assign them manually?
from remotely.
@d1ch4rd I'm not sure about the error. This is actually my first time ever using a Mac, so I'm learning as I go.
The ServerVerificationToken is supposed to be blank at first. It will generate one and share it once with the server the first time it connects.
The Device ID missing, though, probably means must mean that uuidgen
wasn't present. What version of macOS are you running?
from remotely.
All good man. I'm the same guy from Reddit you were responding to this morning about the Windows agent stuff. So just for context to pull both of these things together.
I'm using a late 2012 mac mini that's running Mojave 10.14.6
from remotely.
Thanks. :)
Can you check if uuidgen
is available in the terminal? I read that it was included with all versions of Mac out of the box. But it's not.
from remotely.
Haha yea actually I was just updating my previous post.
I confirmed in terminal that uuidgen does work and provides a value back. Is it worth just taking that and copying it into the ConnectionInfo.json?
from remotely.
Sure. But I'm curious why it didn't work in the script. Does your version of the script have #!/bin/bash
at the top for the shell? I originally had it as zsh, but then I found that some of the syntax I was using didn't work for it.
from remotely.
Oh, and if the service still won't start, try doing sudo launchctl kickstart -k system/com.translucency.remotely-agent
and seeing what it says. Then try sudo /usr/local/bin/dotnet /usr/local/bin/Remotely/Remotely_Agent.dll
and see what that says.
from remotely.
Yes it does. Here is the last bit of where the installer ends.
inflating: System.Xml.XPath.XDocument.dll
inflating: WindowsBase.dll
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 42.9M 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
/Library/LaunchDaemons/remotely-agent.plist: service already loaded
Could not kickstart service "com.translucency.remotely-agent": 139: Service cannot presently execute
from remotely.
Ok so I deleted the original files and ran the installer again. This time it did grab a device ID on it's own, but still doesn't start. Trying your other commands now.
from remotely.
As it seems, it might be my same problem as the Server 2016. The second command says /usr/local/bin/dotnet: command not found. I installed .NET to make sure it was there but there is no such folder even after install.
from remotely.
Hmm. It was supposed to install it with Brew. What does brew install --cask dotnet
say? No sudo there.
from remotely.
Ok that was definitely it. I can see the command as part of the install script but for some reason it seems like it never actually ran. After running it manually it did download the prereqs and I now see it in the UI.
This is amazing! I'll keep an eye out for new versions. Feel free to ping me if you need someone to test. I have a huge VM environment at home with lots of ability to test OS versions and such.
from remotely.
I hope Mac Os agent will release soon 👍
from remotely.
I've also run into the MacOS install issue, same as above. The issue seems to have been that by running the install script with sudo, it prevents brew from install dotnet due to an update of theirs. So the only way to get it working was by reading through this post and running 'brew install --cask dotnet' as my normal user.
from remotely.
I'm not seeing that brew won't let me install dotnet without at least MacOS Mojavi (10.14.x) and I'm on High Sierra (10.13.x).
from remotely.
nyuy怒火神什么.我很无语偶很无语夫人人人都很
from remotely.
Catalina, at minimum, is required by .NET 6 (the currently-supported version), and .NET 3.1.
https://docs.microsoft.com/en-us/dotnet/core/install/macos
from remotely.
The macOS script found on remotely server won't work with macOS 13.1 and zsh as default shell. Gives a command not found.
Now trying to install it manually
from remotely.
The macOS script found on remotely server won't work with macOS 13.1 and zsh as default shell Now trying to install it manually
Installing it manually didn't work
from remotely.
I found 1 problem in the install script, and 1 small enhancement.
Line 77 (this is the problem)
unzip -o $InstallDir/Remotely-MacOS-x64.zip
needs to be changed to
unzip -o $InstallDir/Remotely-MacOS-x64.zip -d $InstallDir
I realized that the script was downloading the zip file to $InstallDir, but it unzips to whatever your current working directory is, not $InstallDir or even where the script resides. Adding -d
to the unzip command fixes that.Line 90
curl --head $HostName/Content/Remotely-MacOS-x64.zip | grep -i "etag" | cut -d' ' -f 2 > $InstallDir/etag.txt
change to
echo $ETag > $InstallDir/etag.txt
This is a small enhancement to remove a second curl call to get the etag from the zip file. We already have it in the variable $ETag, so there's no need to retrieve it again.
I've tried these changes on both macOS 10.15.1 and 12.6 in zsh.
Edit to add: not sure the install completes in 12.6, seems like the agent doesn't start correctly via launchctl, but the unzip operation at least puts things where they belong.
from remotely.
So im not sure why I can't get this to work, has anyone been successful?
from remotely.
sorry guys am I missing anything or are you talking about the unattended client? I was looking for a mac client for supporting others on MAC.
from remotely.
I got the installation of the agent 'working' on Ventura, with the same changes @redfive2012 mentioned.
When running the command:
sudo /usr/local/bin/dotnet /usr/local/bin/Remotely/Remotely_Agent.dll
It shows the log below, where it is complaining about a non-existing or not correctly filled ConnectionInfo.json
When I check, the installer created the ConnectionInfo.json file in /usr/local/bin/Remotely
It is filled (correctly), but 'ServerVerificationToken' is empty.
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
Error writing log entry: Operation is not supported on this platform.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
Error writing log entry: Operation is not supported on this platform.
Error writing log entry: Operation is not supported on this platform.
info: Microsoft.Hosting.Lifetime[0]
Content root path: /Users/marvin
fail: Remotely.Agent.Services.ConfigService[0]
No connection info available. Please create ConnectionInfo.json file with appropriate values.
Error writing log entry: Operation is not supported on this platform.
fail: Remotely.Agent.Services.ConfigService[0]
No connection info available. Please create ConnectionInfo.json file with appropriate values.
Error writing log entry: Operation is not supported on this platform.
fail: Remotely.Agent.Services.MacOS.UpdaterMac[0]
Error while checking for updates.
System.NullReferenceException: Object reference not set to an instance of an object.
at Remotely.Agent.Services.MacOS.UpdaterMac.CheckForUpdates() in /Users/runner/work/1/s/Agent/Services/MacOS/UpdaterMac.cs:line 79
Error writing log entry: Operation is not supported on this platform.
info: Remotely.Agent.Services.AgentHubConnection[0]
Attempting to connect to server.
Error writing log entry: Operation is not supported on this platform.
fail: Remotely.Agent.Services.ConfigService[0]
No connection info available. Please create ConnectionInfo.json file with appropriate values.
Error writing log entry: Operation is not supported on this platform.
fail: Remotely.Agent.Services.AgentHubConnection[0]
Error while connecting to server.
System.NullReferenceException: Object reference not set to an instance of an object.
at Remotely.Agent.Services.AgentHubConnection.Connect() in /Users/runner/work/1/s/Agent/Services/AgentHubConnection.cs:line 94
Error writing log entry: Operation is not supported on this platform
from remotely.
Problem:
In the script Install-MacOS-x64.sh:67 the curl
command to download the file $HOST/Content/Remotely-MacOS-x64.zip
file does not exist on the server and nothing gets downloaded, therefore the unzip command fails.
- See screenshot for error
Other things noticed:
$HOST
is being injected properly, and I can confirm nothing get downloaded by trying the full download URL in a browser or even withcurl -v
$HOST/Content/Remotely-Linux-x64.zip
downloads fine. Why does this work and not$HOST/Content/MacOs-x64.zip
?
Work around
- None that I can find
from remotely.
Hello, just seeing if anyone has the "Remotely-MacOS-x64.zip" files. This seems to be the one missing piece to the puzzle from what I've seen.
from remotely.
Unfortunately the "Remotely-MacOS-x64.zip" files do not seem to be part of the current release.
Is this by mistake, or was this agent revoked?
I just started using Remotely for IT support at my school, which is blocking any ports other than 80 and 443. Usual suspects i.e. RustDesk would be blocked. On the windows based systems Remotely has been working just fine. Unfortunately I can not get the macOS agent to work.
from remotely.
Any solution to this issue? Was this included in previous releases?
from remotely.
Still interested in this. I know it's been a while. Right now, ensuring that I can use Ctrl-Alt-Delete with remote Windows sessions is a more immediate need, since I have finally decided to give up ConnectWise Control for good, in favor of Remotely.
I may or may not still be a committer on this project. I was, at one time. I am definitely ready to actually contribute some work (as opposed to just talking about contributing).
(Edit: eh, I see the Contributor tag on this latest comment, so I guess I am still a committer. Great!)
from remotely.
Related Issues (20)
- High CPU, RAM and I/O usage HOT 15
- How to build HOT 1
- add certificate in remotly step by step HOT 2
- Turn off auto-update the agent on Windows HOT 1
- FEATURE REQUEST: Record the remote screen HOT 1
- Device ID is missing. Cant use Get support ! HOT 2
- How to update? look like everything has changed... HOT 2
- SSO OAUTH HOT 3
- Add More Modern TLS Support for Install-Remotely.ps1 HOT 1
- Migration from older Remotely Version to the newest one failed how to migrate DB and get login working again HOT 1
- ListView for the Home Screen HOT 4
- Docker: ResetPassword link uses wrong hostname HOT 1
- can't connect if i rename the exe HOT 2
- What's with Docker Tags? HOT 3
- Linux client installation issues. HOT 1
- Cannot Start Remote Control Session -- Manjaro KDE HOT 2
- Remotely wont run in aarch64?
- Feature Request: Software Install Component using winget or choco HOT 4
- Numlock is not writing numbers
- New install of remotely via Docker is no-go HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from remotely.