Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows Support #13

Open
deyurao opened this issue Sep 8, 2020 · 16 comments
Open

Windows Support #13

deyurao opened this issue Sep 8, 2020 · 16 comments
Labels
os-support Information about how to setup the server-side OS to work with VNSee

Comments

@deyurao
Copy link

deyurao commented Sep 8, 2020

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.

@matteodelabre
Copy link
Owner

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 matteodelabre added the os-support Information about how to setup the server-side OS to work with VNSee label Nov 9, 2020
@deyurao
Copy link
Author

deyurao commented Nov 9, 2020

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!

@ennioVisco
Copy link

ennioVisco commented Dec 4, 2020

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 😊

@hcu00
Copy link

hcu00 commented Mar 10, 2021

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

@Baccanno
Copy link

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
Copy link

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.

@matteodelabre
Copy link
Owner

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?

@Baccanno
Copy link

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
Copy link

Baccanno commented Mar 14, 2021

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
Copy link

Baccanno commented Mar 14, 2021

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
Copy link

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
Copy link

Baccanno commented Mar 22, 2021

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

@StefaanVanDooren
Copy link

StefaanVanDooren commented Jun 15, 2022

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

@Baccanno
Copy link

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?

@StefaanVanDooren
Copy link

StefaanVanDooren commented Jun 15, 2022

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

@SteffanDonal
Copy link

SteffanDonal commented Sep 18, 2023

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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
os-support Information about how to setup the server-side OS to work with VNSee
Projects
None yet
Development

No branches or pull requests

7 participants