vnsee icon indicating copy to clipboard operation
vnsee copied to clipboard

Windows Support

Open deyurao opened this issue 3 years ago • 16 comments

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.

  1. 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.
  2. 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).
  3. 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.

deyurao avatar Sep 08 '20 08:09 deyurao

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.

matteodelabre avatar Nov 09 '20 16:11 matteodelabre

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!

deyurao avatar Nov 09 '20 17:11 deyurao

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 😊

ennioVisco avatar Dec 04 '20 23:12 ennioVisco

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..

hcu00 avatar Mar 10 '21 22:03 hcu00

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

Baccanno avatar Mar 13 '21 14:03 Baccanno

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.

Baccanno avatar Mar 13 '21 15:03 Baccanno

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?

matteodelabre avatar Mar 14 '21 23:03 matteodelabre

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

image

Baccanno avatar Mar 14 '21 23:03 Baccanno

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

Baccanno avatar Mar 14 '21 23:03 Baccanno

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

Baccanno avatar Mar 14 '21 23:03 Baccanno

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.

Baccanno avatar Mar 14 '21 23:03 Baccanno

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 :

  1. Ordered a HDMI emulator https://www.amazon.fr/gp/product/B08PNL81Q4/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1
  2. Set a custom resolution in NVIDIA control panel
  3. 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

Baccanno avatar Mar 22 '21 12:03 Baccanno

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. IMG_2256

StefaanVanDooren avatar Jun 15 '22 08:06 StefaanVanDooren

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. IMG_2256

Nice, so no need of an hdi mock ? Can you rotate the screen with this driver?

Baccanno avatar Jun 15 '22 08:06 Baccanno

Just tried it. Added an extra option to the file. Reinstalled the driver (not sure it was needed)

image

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

StefaanVanDooren avatar Jun 15 '22 08:06 StefaanVanDooren

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)

SteffanDonal avatar Sep 18 '23 07:09 SteffanDonal