vnsee
vnsee copied to clipboard
Windows Support
So I am quite new to git and I'm not sure if this is the right place to post. I managed to get this to work on Windows, with quite a few hiccups.
The steps basically mirrors the Linux setup.
- You need to set up a virtual monitor in Windows with the specific resolution. This proves to be incredibly difficult. The only thing I find working is a virtual monitor software by a Chinese developer. The software is not free (10 CNY or 1.5 USD for license) but does the job.
- Set up the VNC server that projects only the virtual monitor through the 5900 port. TightVNC does the job for me. Example code: cd C:\Program Files\TightVNC tvnserver -run tvnserver -controlapp -sharedisplay 3 (I have the virtual monitor as my third monitor).
- Run rMVNCClient.
Photos: https://photos.app.goo.gl/QoezLeZE4FVL3Qy27
Extra tip: To battle the lags I use Win+Shift+Left/Right Arrow to move the windows, Win+Up/Down Arrow to maximize/restore.
Edit:Typos.
Thanks a lot for sharing your workflow @deyurao! Making VNSee less strict on the incoming screen resolution is on the roadmap (see also #11). I’m not really familiar with Windows, but I’m a bit surprised that there’s no better solution for creating virtual screens. I’m a bit reluctant to linking to the solution you found since it’s not free software and, crucially, it doesn’t look like the source code is available for auditing. Through a quick search I also found this project which might be of interest since it has some overlap with VNSee in its goals.
I totally understand. Windows used to have native support of creating virtual screens but drop that function a couple of versions ago. I'll check out WifiScreen and report back!
I'll be glad to help testing it! Unfortunately, I'm on Remarkable 2, and according to #15, there is still no stable solution for printing on Remarkable 2. I'll be waiting for that and then come back 😊
Everybody thanks :-) @deyurao : Please, can tell us how you got the file from BaiduNetDisk? I looked at signing up, but that seems horror with the chinese language and a foreign mobile phone number. I tried several shared accounts, without result... It is not about the money, because I gladly pay 1,50 for this to work..
I tried with https://www.tightvnc.com/ that seems to be an open source VNC server for windows.
Seems that I have issue like the one stated before in #15
what(): Server uses an unsupported resolution (3440x1440). This client can only cope with a screen width of exactly 1404 pixels and a screen height of 1872 pixels
Okay So it work flawlessly ! I used the following command to set the screen resolution.
./tvnserver.exe -controlapp -sharerect "1404x1872+0+0"
I'm now looking for screen orientation. But I guess 'I'll find the info somewhere on the repo. Thans for your amazing work.
Thanks for the information @Baccanno. To clarify, does this solution allow you to create and share a virtual screen on Windows, or are you just sharing (a portion of) an existing screen to VNSee?
I'm sharing a portion of an existing screen with TightVNC, (my display is 3440x1440, so horizontal is cut to 1404, and vertical only shows 1440 and bottom is RM app). I switch on high contrast mode so it displays better.
I don't understand how it could work but I also tried with UltraVNC viewer (another VNC tool, but the client) to create a secondary screen but it disconnected my actual monitor and I had to hard reset the computer (I didn't tried through win+P though, maybe it would have worked to cycle through monitors)
Below the actual options, not sure how it should work
Indeed having a virtual screen of size 1872x1404 would be the best. But I'm new to how VNC should work in general so I'm a bit stuck. Moreover UltraVNC does not seem to provide custom resolution (only standard ones + scales).
Regarding this lack of option if we had some configuration on vnsee (regarding rotation and resolution) I think that might help ?
Thanks again
Another solution could be to have a Linux VM serving the VNC, I recently installer ubuntu with WSL 2 but I'm not sure how to enable X on it nor how to activate a VNC server on it. Moreover it would serve the VM's screen and not the main win machine where all my dev env is.
Just thoughts
As far as I understand it, regarding the following UltraVNC documentation, https://www.uvnc.com/docs/documentation-1-3-0/134-virtual-displays.html It seems like the server allows the query of virtual screens. So like the client (theirs usually but here vnsee ?) could be able to ask for a 1404x1872 screen and the server would serve it.
Alright, so for now, I managed to get a full virtual side screen but in PORTRAIT mode, I can't get the screen to go in landscape whatsoever. Screen rotation in windows works at a resolution level, it's not a real rotation (1404x1872 becomes 1872x1404). I'm thus still looking for a solution.
For the protrait mode here are the steps I took :
- Ordered a HDMI emulator https://www.amazon.fr/gp/product/B08PNL81Q4/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1
- Set a custom resolution in NVIDIA control panel
- After having TightVNC installed and added to path, I execute that bat script
start tvnserver -run
echo "Let TVN server startup and continue"
@pause
tvnserver -controlapp -sharerect "1404x1872+0+0"
tvnserver -controlapp -sharedisplay 2
start ssh remarkable plugins/vnsee
echo "Continue to stop VNC session"
@pause
ssh remarkable killall 'vnsee'
taskkill -F -IM tvnserver.exe -T
echo "Done can exit now"
@pause
exit
Just want to share my success on windows with the driver I found here : https://github.com/ge9/IddSampleDriver/releases
Followed the instructions to install the driver (I had to manually install the certificate), then I changed the options file to :
1 //place this file in "C:\IddSampleDriver" //lines beginning with "#" are ignored (comment) //the first line mush be a positive integer (small number (<5) is recommended)), NOT comment //(currently) the location of this file must be "C:\IddSampleDriver\option.txt" (hard-coded) // numbers should be separated by comma 1404, 1872, 60
Only tested it over WiFi (don't have my USB-cable with me), which is a bit slow.
Just want to share my success on windows with the driver I found here : https://github.com/ge9/IddSampleDriver/releases
Followed the instructions to install the driver (I had to manually install the certificate), then I changed the options file to :
_1
place this file in "C:\IddSampleDriver"
lines beginning with "#" are ignored (comment)
the first line mush be a positive integer (small number (<5) is recommended)), NOT comment
(currently) the location of this file must be "C:\IddSampleDriver\option.txt" (hard-coded)
numbers should be separated by comma
1404, 1872, 60_
Only tested it over WiFi (don't have my USB-cable with me), which is a bit slow.
Nice, so no need of an hdi mock ? Can you rotate the screen with this driver?
Just tried it. Added an extra option to the file. Reinstalled the driver (not sure it was needed)
I just haven't tried if it works, because I can't get my remarkable out of sleep mode :-( BTW, this is on windows 11
EDIT : this doesn't seem to work. So only portrait mode available at the moment
I have had success with a fake landscape mode - using OBS, you may capture windows / create browser sources and rotate them 90 degrees so they appear correct. Then, you can create a "fullscreen projector" window on the virtual display.
Slightly unrelated, but as part of this I've also adapted Valve's screen-space dithering shader for use inside OBS, which helps immensely with the appearance of gradients and photos:
// reMarkable display has 16 unique shades
uniform float colorDepth = 16.0;
uniform float3 greyWeight = { 0.2989, 0.5870, 0.1140 };
float3 DitherFor(float2 screenPos)
{
// original RGB dither by lestyn from Portal 2 X360
float3 dither = dot(float2(171.0, 231.0), screenPos.xy) * float3(1,1,1);
dither.rgb = frac(dither.rgb / float3(103.0, 71.0, 97.0));
return dither.rgb / 255.0;
}
float4 mainImage(VertData vert) : TARGET
{
// Transform fragment space to reMarkable space
float2 screenPos = vert.uv * float2(1872.0, 1404.0);
float3 color = image.Sample(textureSampler, vert.uv).rgb;
float3 colorGrey = (dot(color, greyWeight) / colorDepth) * float3(1,1,1);
float3 dither = DitherFor(screenPos);
dither = dither.g * float3(1,1,1);
float3 ditheredColor = colorGrey + dither;
// The 255.9 is a little numeric hack to avoid black/white not being "clean".
// You'll see dithering in #FFF areas if it's 255.0
return float4(
(floor( ditheredColor * 255.9 ) / 255.9) * colorDepth,
1.0
);
}
To use it, add a "User shader" filter to your OBS group/scene. Copy/paste the shader above into the input and hit reload. You should see the dithering take effect.
EDIT: I'd like to see this project's revival, with rotation & dithering support included. I may pick this up if/when I have time to... A major problem is VNC and the lack of "modern" tools. It's a dead simple way to implement this, basically designed for it - but options are limited, and screen rotation is one of those things that really shouldn't be as difficult as it is (on Windows, at least)