Code Monkey home page Code Monkey logo

virtual-display-rs's Introduction

Virtual Display Driver

Build GitHub release (with filter)

This is a Windows driver made in Rust which creates a virtual desktop.

It has many uses, such as:

  • A private virtual desktop for VR use
  • For remote desktops
  • For screenshare presentations, to give you more workspace with a second monitor
  • Getting a higher resolution (or higher refresh rate) display when you don't have a physical one on-hand (though note you can only use it in software/VR)
  • Other uses? Let me know!

Supports: Windows 10 2004+ (x64 only)

For any bug reports, please see the debugging or reporting crashes section to get the panic message for the bug report

Features

  • Multiple monitors (up to 10)
  • Multiple resolutions per monitor
  • Multiple refresh rates per resolution
  • App to configure them all, disable all/individual monitors
preview.mp4

How to install

  1. Go to the releases section for the latest driver.
  2. Download (you may receive a warning, just press accept)
  3. Install certificate
  4. Run the msi installer
  5. The driver will be installed, started, and you can find a shortcut to the control app in the start menu, named "Virtual Display Driver Control"

Note: For users having trouble installing/running the app, please see #49

How to install portable version

  1. Go to the releases section for the latest driver.
  2. Download (you may receive a warning, just press accept)
  3. Install certificate
  4. Install install.reg
  5. Open device manager
    • click on any item in the list
    • go to Actions -> Add legacy hardware
    • next on Install hardware that I manually select from a list
    • next on `Show all devices
    • click on Have Disk... and select the folder with the driver files in it
    • finish the setup
  6. The driver will be installed and started. The control panel exe you see in the folder will work from anywhere you put it.

Optional: Installing the driver with nefcon CLI

  1. You might need to install the driver certificate
  2. Get nefconc CLI
  1. Put nefconc.exe in the extracted portable folder
  2. Open console on this folder and run:
.\nefconc.exe --remove-device-node --hardware-id Root\VirtualDisplayDriver --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318"
.\nefconc.exe --create-device-node --class-name Display --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318" --hardware-id Root\VirtualDisplayDriver
.\nefconc.exe --install-driver --inf-path ".\VirtualDisplayDriver.inf"

You can also completely uninstall the driver only by executing the first command:

.\nefconc.exe --remove-device-node --hardware-id Root\VirtualDisplayDriver --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318"

Installing the certificate

The certificate needs installation for Windows to accept the driver

  1. In your downloaded zip, there is a file DriverCertificate.cer and install-cert.bat
  2. Open a cmd prompt as admin and run install-cert.bat
  3. Verify the certificate installed properly. *

* If the certificate didn't install properly, then the driver won't install. If driver installation fails, this is most likely the reason why; and you should check that the certificate is actually installed. Try manually running the commands in the install-cert.bat file (below) in an admin cmd prompt to make sure the certificate is installed correctly (for both root and TrustedPublisher stores). The commands will tell you if they successfully added it or not.

certutil -addstore -f root "DriverCertificate.cer"
certutil -addstore -f TrustedPublisher "DriverCertificate.cer"

You can also search for Manage Computer Certificates, look in Trusted Publishers and Trusted Root Certification, you will see the certificate named DriverCertficate.

image

You can manually import it by right clicking on the menu entry -> All Tasks -> Import, and following the instructions in the import wizard

image

Why is it so difficult? The reason I didn't add auto certificate installation is because I believe certificates are a personal thing, and should not be added automatically without the users knowledge.

Updating

  1. Download the new release
  2. Install the msi package

Using the app

Please see the wiki for instructions on using the app.

How to build

  1. Download and install Visual Studio (use the 2022 edition)
    • Select and install the Desktop development with C++ workload as well as Windows SDK
  2. Install the WDK
  3. Install cargo-make if you don't have it
  4. Install cargo-target-dir

Make sure you generate your own windows code signing cert and install it according to "Installing the certificate" section.

You can build it with cargo make build (debug) or cargo make -p prod build (release), and check the target/output directory for all the files

To build the installer, do a cargo make build-installer (dev) or cargo make -p prod build-installer (release). In order to build the installer, you need wix toolset installed and on Path

... Or, fork my project and build it with github actions. You will require 2 repository secrets:

  • PRIVATE_KEY - a windows code signing pfx certificate encoded in base64 (use certutil -encode)
  • PRIVATE_KEY_PASSWORD - self explanatory

Debugging or Reporting Crashes

If you want to debug a problem or need to report a crash, follow the below instructions:

All messages from the driver are logged in the Windows Event Viewer.

  1. Open the Event Viewer
  2. Go to Windows Logs -> Application
  3. You will see logs for the driver under the source name VirtualDisplayDriver

If you want to make them easier to see

  1. right click on Custom Views
    • click Create Custom View...
      • select By source
      • find and select VirtualDisplayDriver in the list, then press Ok
      • type in VirtualDisplayDriver for the name, and press Ok
  2. You should now see any log messages under the Custom Views section for VirtualDisplayDriver

If you're using a driver compiled in debug mode, you can see panic messages and other information in a live logger: download DebugViewPP, run it, click on Log->Capture Global Win32 (note, this requires DebugViewPP be run with admin permissions). As long as the program is open and capturing, the messages will appear live as they are logged. This is a bit easier to use than the event log when you are trying to debug something.

Contributions

All contributions are welcome!

For first time contributors, please read our contributing guide.

Forking or using in other projects

You are welcome to use this project in your own projects.

If you do so, please contribute back to the main project with your code changes, and even by sponsoring. Every little bit helps us make an even better project. We appreciate it, thank you!

Where to talk or get help

If you have any questions, need support, need to collaborate on development, or any other use-case, you may join our discord server (see related #virtual-display-driver channels). This is the quickest and easiest way to communicate.

You may also post in the project discussion section. Though note that using the discord channel will get your messages seen and responded to quicker.

Supporting the project

If this project has helped you, or you want to say thanks and help continued development, sponsorships are very welcome. ❤️

virtual-display-rs's People

Contributors

dependabot[bot] avatar kylewlacy avatar molotovcherry avatar nomi-san avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

virtual-display-rs's Issues

Installer

An installer would be lovely. I don't have any experience in making installers, but if someone knows how, any help would be very welcome.

I don't have much requirements:

  • Create a few registry subkeys/keys on install, delete them on uninstall
  • Copy over driver files / app, install driver, on uninstall, uninstall driver , delete directory in program files
  • sign the installer
  • create shortcut to user app
  • Important: reads env vars for the version / location of files to include in the installer (calculated from CARGO_BUILD_TARGET_DIR and PROFILE if it exists, otherwise use regular target directory)

I think nsis is a good bet for this

I can handle integration into the build system / github actions, just need a working install script I can adapt.

Reason: I require installation of a regkey in order to allow the driver to log to the event log, so users can see panics and report them. Currently, this information is lost unless debugview is open. The driver is incapable of creating a subkey, and I don't want to do this installation step using the regular app (just clunky to do it that way). The proper way is with an install package. Plus, it removes the need to manually install the driver

If you know how and want to spend a little time helping out, it would be very welcome. Please respond to this issue if so

CLI tooling tracking issue

Original merge from PR #47. References #43

  • Easy to read error message if client doesn't connect - comment
    Something like

Failed to connect to driver; please ensure driver is running and working. Driver must also not be in use by any other tools, e.g. gui apps

  • Make RequestState more global - comment
  • Use smallest available IDs - comment
  • For add/add-mode/remove-mode, allow specifying custom refresh rates per monitor mode. Making it clearer to type is also a bonus. - comment
  • Deprecate mode indexes and allow selection of monitors by unique WIDTH/HEIGHT. Potentially also allow deleting only refresh rate instead of entire mode. - comment. UX TBD
  • Make client connection global / always store requested state so it can be accessible anywhere. - comment
  • With global state, other checks can be made smarter, such as displaying an error when user tries to remove a monitor ID that doesn't exist.

Cc @kylewlacy

Connection failure on fresh windows install

I just reinstalled windows and started to reinstall the driver

Originally it started with giving an issue about the missing vcruntime140.dll

I fixed that by downloading the Microsoft Visual C++ Redistributable

Now all I see is the "failed to connect to driver at 127.0.0.1:23112" prompt

There's no logs or anything in event viewer so I'm assuming I'm missing another dependency. I'm no programmer though so I really don't know

Windows 10 Home

cursor repeat

When I create and open a virtual screen and use remote software streaming connection, two cursors appear on my screen, one on the controlled side and one on the master side, and there is a slight ghost as I move. How to solve this problem? Thank you very much!

Desktop app for configuring monitor

A desktop app with the following features :

  • Connects to driver backend
  • Allows to add/remove specific monitors on the fly
  • Disable / re-enable all monitors
  • Fine grained configuration of resolutions / refresh rates per resolution for each monitor

Make the driver the Single Source of Truth

Persist config to registry as usual, store entire state (enabled/disabled) in the driver instead, where the control app requests the current state from the driver on startup. This eliminates any possibility of the control app state getting desynced

Limit each frame ms time on WaitForSingleObject

Currently hard coded to 16ms, which is fine for 60hz. We should share the monitor's refresh rate over and wait for the maximum of 1 frame for the refresh rate. Not a big deal right now, but could be a good optimization

It's not clear whether making such a change would result in any actual performance improvements, so this issue remains open until a resolution is found.

So far seems to be fine without any change

Add HDR, WCG, and SDR options

HDR support is coming in idd 1.101, which enables us to support HDR and WCG. This is only possible in Windows 11 22H2 Sept Update + however, since it is a brand new feature2. This should enable more options in HDR applications for our monitor. We should be able to still support Windows 10 2004+ by using runtime checks for this, but compiling against the newest version, though the functionality will only be available in the newest version of windows.

I think there should be a toggle per monitor for this feature in the app, one for each mode.

To figure out the version for runtime checks, check against IddCxGetVersion which returns 0x1A00 (IDDCX_VERSION_SV3) for the newest update.

Footnotes

  1. https://learn.microsoft.com/en-us/windows-hardware/drivers/display/iddcx1.10-updates

  2. https://learn.microsoft.com/en-us/windows-hardware/drivers/display/iddcx-versions#iddcx-version-info-for-windows-11-releases

New Control Panel with Flutter

Discussed in #87

Originally posted by Dampfwalze February 14, 2024
Since it seemed like you are a bit uncertain, which framework suits this purpose well, I've gone ahead and put in a day of work, to build a prototype with Flutter:

2024-02-14.09-37-35.mp4

I have used the fluent_ui package, so it looks similar to what you have already implemented using WPF.

I've also gone ahead and integrated it into the installer.

I think Flutter serves this purpose well, because it has good performance and a very good and easy development experience. It builds to a small application package and does not have dependency hell.

The Dart programming language has a similar ecosystem than Rust, while being similar to C#, but with more polished language features and good type safety (sound null safety). Recently, it also got new powerful functional programming features, like pattern matching, similar to Rust. Sometimes, I like to call it "Managed Rust".

Source: https://github.com/Dampfwalze/virtual-display-rs/tree/control-panel-flutter

I have published a release with this Control Panel

I am curious about your opinion and if this interests you, I can develop this a bit further and open a PR.

Support multiple monitors

Doable. I already put it up to 3 monitors and it seemed fine, but this needs to be inspected more so I can be sure it's optimized in the driver, e.g. 1 thread per monitor.

Add common modelines more easily

Prerequisites

Please answer the following questions for yourself before submitting an issue.

  • I checked to make sure that this request has not already been filed

Description

Is your feature request related to a problem? Please describe.
I am using Sunshine & Moonlight to stream from my desktop to my laptop and my phone. These two scripts enable me to have a near seamless experience together with virtual-display-rs, provided the resolution of my client corresponds with one of the resolutions I have set. If not, I need to find out what the resolution of my client is and set it. Ideally, I'd be able to set a resolution in Moonlight and if it were not completely uncommon, it would be set on my desktop before connecting. I could also set half the resolution to conserve power and bandwidth.

Describe the solution you'd like
If there was an option to just add most modelines to my virtual monitor with one click, that would be great.

Describe alternatives you've considered
Theoretically, the script author might integrate with virtual-display-rs more tightly and set the resolutions directly. That would be most ideal, but given the simplistic nature of the project, I believe that's rather unrealistic.

Obviously, I can just add all the modelines myself, this is not a huge inconvenience to me, but it is one. Alternatively, a list of common modelines to choose from would also be practical. It could have an "add all" button, maybe.

Shader plugin support / Temporal processing support (Blur Busters has source code bounty (2K) for this)

I'm Mark, the creator of Blur Busters and TestUFO.

I noticed you have a virtual display driver capable of custom refresh rates -- maybe you want to make minor modifications to meet an existing Blur Busters source code bounty?

For those not familiar with me -- I'm an indie-turned-business, and the Internet's biggest advocate for high refresh rates, and I am in over 25 peer reviewed research papers and I have an easier Coles Notes research portal Area 51 on BlurBusters.

TestUFO is my free display-testing/display-demoing website used by over 500 content creators (reviewers, youtubers, bloggers) that tests displays. Two of the biggest content creators are RTINGS (which uses my invention) and LinusTechTips (which used the pursuit camera in some tests).

I've been looking for a good open source virtual display driver as a base to produce drivers that can implement algorithms such as testufo.com/blackframes (software BFI) and testufo.com/vrr (simulated VRR on non-VRR displays), as well as hundreds of other fantastic temporal filters.
Even if not all filters are possible, a virtualized display driver with temporal-processing capabilities, would unlock a lot of neat capabilities for a lot of communities.

It could also be used to add subpixel-awareness for OLED displays (odd pixel structures) by scaling things in a custom-subpixel-pattern way, it was also posted here in ClearType improvement thread, but I'm posting here since I've now discovered this project:

$2K Bounty for a Virtual Display Driver capable of Temporal Filters

Which I crosspost here:

**Jason-GitH ** commented May 11, 2023

Yes, that's another option as an alternative.

I mention this already at microsoft/PowerToys#25595 (comment)

A USD $2000.00 bounty already offered for this open source driver project

Blur Busters currently already offers a $2K bounty for this -- a subpixel-aware downscaler would allow everything to be "ClearType'd" including graphics, and not just text. This can even be done as a third-party Windows Indirect Display Driver, which I already offer a USD$2000.00 source code bounty for something under MIT or Apache. Contact me at mark[at]blurbusters.com

Basically, a Windows IDD that virtualizes a simulated monitor at a simulated resolution at a simulated refresh rate (can be higher or lower Hz than real display) -- we have some important uses cases for this), and runs all the frames through plug-in GPU shaders, to display on an existing physical monitor.

In addition to solving this problem -- plug-in GPU shaders can enables shockingly creative stuff such as:

  • subpixel-aware downscaling, etc.
  • custom developer refresh rate testing on monitors not owned (e.g. test refresh rates that your monitor does not support)
  • easier software developer testing with displays that aren't in the QA lab, by simulating a display
  • easier hardware prototyping and engineering of future displays, by simulating a display
  • simulated interpolated VRR (www.testufo.com/vrr algorithm) on displays that don't have VRR
  • software based BFI OLED motion blur eduction (www.testufo.com/blackframes#count=3)
  • streaming / headless use cases (without needing to be in a game nor open Remote Desktop)
  • software based overdrive algorithms
  • custom spatial filters (e.g. HLSL CRT filters for retro simulation / preservation).
  • custom temporal filters (e.g. simulate a CRT electron beam, complete with rolling scan and phosphor fade simulation, by using 8 digital refresh cycles per CRT Hz, on 480Hz display that windows thinks it "sees" as a 60Hz CRT tube), for even further improved retro simulation / preservation / education / history education.
  • add frame generation (e.g. reprojection https://www.youtube.com/watch?v=IvqrlgKuowE for 500fps UE5)
  • Other plug-in GPU shaders (that can modify, adjust, scale, process, merge, blend, etc history of buffered "refresh cycle" frames)

The $2K bounty doesn't have to include these custom shaders, but needs to include a plug-in shader system, and end users need the ability to share shaders/profiles with each other (e.g. a sharable modular file-based format, possibly JSON or XML) that loads settings such as shader module (compiled or uncompiled), input Hz, output Hz, constraints if any (outputHz = Formula(inputHz)). It could be a single-file format or a composite (.zip) that includes shaders and settings for a custom filter/processing. Such as shaders that require actual display output Hz to be integer multiples of the virtualized display Hz. The bounty requirements are negotiable (contact mark [at] blurbusters.com), but it needs to meet the needs of the open source community, the retro community, the blur busters fan community, and the commercial community (e.g. display prototyping), as I do work with display manufacturers. As you know, I am the inventor of free display tests used both by indies and manufacturers...

Other options include integration of SweetFX/Reshade/etc into the virtual display driver, including possibly open source or third party lagless frame generation algorithms (e.g. https://www.blurbusters.com/framegen ...) or whole-desktop SmoothVideoProject, etc. So this ideally should be supported too, although it cannot support the entire scope needed. However, the capability for output refresh rates higher AND/OR lower AND/OR variable than the refresh rate visible in Control Panel for the said virtualized display. In other words, the real Hz displayed on real display, is a processed version of the virtualized Hz visible to Windows,. e.g. 60Hz in Windows, but is outputting 240Hz+BFI with persistence adjustability (similar to https://www.testufo.com/blackframes#count=4&bonusufo=1 as one example). Or variable frametimes (I can help you understand how to control VRR).

I really would like to see a driver package capable of running custom shaders at refresh cycle granularity. And enough example dummy shaders to demonstrate successful virtualization of resolution AND refresh rate (both higher and lower than actual physical display(s) connected to computer). INCLUDING of course, variable refresh rate capability which is simply asynchronous timing of Present() that may not be related to timing interval of the refresh cycles. I am OK with the constraint of a fixed-Hz virtualization (just VRR output virtualization).

Although not needed for subpixel processing filters and input=output Hz filters (shader-process-only filters)..... for certain temporal refresh rate filtering tasks I'll need extremely accurate timing of output-frame Present()'s, which MAY require a separate CPU thread that busyloops right before Present() of the composited frame to the actual output display. So an ultra-high-precision presentation timing thread will be mandatory here, I can help assist you -- I have lots of experience via [url=https://forums.blurbusters.com/viewtopic.php?t=4213]Tearline Jedi[/url] raster-interrupt-style beam racing of VSYNC OFF tearlines).

Keep in mind that this is a refresh-cycle-granularity processor, not a frame-granularity processor. For many reasons, it has to process every refresh cycle independently of underlying framerates of the application running within the desktop on the virtualized display). Be noted, frame presenting timestamps do need to be made available to the shader run once every refresh-cycle (for certain shaders like VRR simulating shaders, which requires refresh cycle granularity processing while also separately knowing the frame presentation timestamps of the underlying application).

Except that it would work on everything in Windows, not just in a test. Reshade/SweetFX/SpecialK/etc does something similar in some ways, but not for many use cases. The other drivers have the problem of being frame-granularity (as frame Present() hooks) which means they are not refresh cycle granularity. Many algorithms need to process at Hz-granularity independently of the underlying frame rate, for successful operation. And being a Windows IDD, means desktop applications are included, not just games.

For qualifying for the bounty, some changes needed may include:

  • Support replacing an existing monitor with the virtualized monitor (or some compromise), ala #19
  • Adding support for a loadable settings/shader system (to allow the temporal processing)
  • A relicensed fork (if that's an option) to Apache/MIT.
    (legal if you're the only developer, or all devs/contributers of 100% of the source code retroactively agree)
  • Bounty requirements can be negotiable (contact me privately), with requirements confirmed into stone before agreeing if necessary;

Example (of hundreds) of possible benefits....

  • End users who want to reduce display motion blur by adding software-based BFI
  • End users who don't have VRR that want to add software-based VRR
  • Adding software-based superior LCD overdrive to cheap monitors (that performs better than manufacturer 17x17 LCD OD LUTs), like superior versions of the old "ATI Radeon Overdrive" system from 15 years ago;
  • Game developers stuck at 60Hz, can finally QA-test on higher refresh rates (virtualized), with the extra Hz's being blended together one way or another (alphablend, or simul-vrr, or tiled, or other).
  • Manufacturers can prototype future-Hz displays like 1000Hz displays
  • Improved SDR/HDR adjustability (e.g. using HDR for SDR content as a brightness booster for BFI like Retrotink 5K).
  • Future CRT simulators for retro community (electron beam simulators in a shader, using 8 refresh cycles on upcoming 480Hz OLED to create 1 simulated 60Hz CRT refresh cycle)
  • etc.

Some possible catches

  • It may not be able to play DRM content (e.g. Netflix)

Question: Are you the only developer, @MolotovCherry?
Note: It could even be a fork of this project if this is too dramatically different. The original project can remain GPL3, just the fork qualifying for the bounty would need to be one of the permissive licenses to support both the indies and businesses, as per above. Can even backport the Apache/MIT version to your GPL3 fork (one-way compatibility), if you want -- all good.

Feature Request: Disable Other Monitors

I would love the option to be able to automatically disconnect all other monitors other than the ones created by this application. That would help with which desktop is presented when connecting with Parsec or similar applications. Thank you for creating such an awesome application!

Support for flipping a display (mirror image)

Prerequisites

Please answer the following questions for yourself before submitting an issue.

  • I checked to make sure that this request has not already been filed

Description

Is your feature request related to a problem? Please describe.
I have a very cheap, thin, portable monitor in a teleprompter with a beam splitter. Teleprompter software can flip its own content, but other software like PowerPoint presentations won't flip. I can only rotate the display in Windows 10, not flip it.

Describe the solution you'd like
I would like there to be an option in the new control panel to flip the virtual display. Then (hopefully) the flipped display could be cloned onto the teleprompter with other software.

Describe alternatives you've considered
The most popular alternative is to use OBS to capture a screen/window and flip it with the preview window on the teleprompter's display. This works, but I would prefer a more polished option that leaves OBS available for other things, like streaming different content to a virtual webcam or external server.

Another alternative is a hardware device that flips the image (they generally run around $400+) or a different monitor with built-in flip capability (also more expensive and thicker - so it won't fit in the tablet holder of the teleprompter as well).

There are limited commercial software options, but they seem to either flag for a trojan in virus total or haven't been updated in years, which are both cause for concern.

Cannot open virtual display Driver Control UI and not dectect Virtual虚拟显示器检察不到以及virtual display Driver Control UI面板打不开

image

Error message windows log:
日志名称: Application
来源: Windows Error Reporting
日期: 2023/10/23 20:07:16
事件 ID: 1001
任务类别: 无
级别: 信息
关键字: 经典
用户: 暂缺
计算机: DESKTOP-TKVNJV6
描述:
错误存储段 ,类型 0
事件名称: PnPDeviceProblemCode
响应: 不可用
Cab Id: 0

问题签名:
P1: x64
P2: Root\VirtualDisplayDriver
P3: {4d36e968-e325-11ce-bfc1-08002be10318}
P4: 0000001F
P5: WUDFRd.sys
P6: 10.0.14393.0
P7: 07-16-2016
P8:
P9:
P10:

附加文件:

可在此处获取这些文件:
C:\ProgramData\Microsoft\Windows\WER\ReportArchive\NonCritical_x64_b5e1baa4902173c22f4f79fe2db5aee4baa60ba_00000000_386f4f92

分析符号:
重新检查解决方案: 0
报告 Id: 98da53ca-719c-11ee-a1f4-18dbf23e9b25
报告状态: 8192
哈希存储段:
事件 Xml:



1001
4
0
0x80000000000000

68083
Application
DESKTOP-TKVNJV6





0
PnPDeviceProblemCode
不可用
0
x64
Root\VirtualDisplayDriver
{4d36e968-e325-11ce-bfc1-08002be10318}
0000001F
WUDFRd.sys
10.0.14393.0
07-16-2016








C:\ProgramData\Microsoft\Windows\WER\ReportArchive\NonCritical_x64_b5e1baa4902173c22f4f79fe2db5aee4baa60ba_00000000_386f4f92


0
98da53ca-719c-11ee-a1f4-18dbf23e9b25
8192



Split drivers up

Each install should have 10 separate drivers, with each driver acting as a standalone copy, and coordinate that back with the control app. This seems to be the only way to truly have multi-display functionality

  • Add named pipes and completely remove port functionality - pipes kind of done
  • Split up into 10 driver instances with disabled process sharing
  • Set up each driver to be dedicated monitor, and listen for named pipe connections
  • Have client connect to all 10 monitors and turn them on/off individually

Virtual Monitor as tablet display

Prerequisites

Please answer the following questions for yourself before submitting an issue.

  • I checked to make sure that this request has not already been filed

Description

Is your feature request related to a problem? Please describe.
I use virtual-display-rs in conjunction with Sunshine and Moonlight client. I have a desktop PC as host and a Surface Pro as client. I'd like to use most of touch related features on Windows (basic ones are already there) but other features like Windows Ink or optimized tablet menu bar don't show up.

Describe the solution you'd like
Register a virtual monitor as it comes from a tablet PC with digitalizer

Describe alternatives you've considered
Pretty much it's my only option asking support here

Additional context
None

Support custom resolutions/refresh rate

Not hard to do, but I am unsure the method I want to go about doing this. I want to make it super easy and simple to do.

Another concern is that it would require a driver restart in order to show the changes. I'm sure this can be fixed by e.g. exposing the different resolutions/refresh rates to windows instead, but this will require some research.

If anyone has any suggestions on what you'd like, feel free to say~

[Feature Request] Add DOS Commands to Control the Virtual Display

Thank you for this project, I am using this project for Sunshine streaming.

I currently have two monitors, Display 1 and Virtual Display 2. I have configured the system to display only on Virtual Display 2. However, after the system goes to sleep and I try to use streaming again, I encounter a prompt indicating no video output. This requires me to manually log in to the RDP desktop and switch the virtual display.

Therefore, I hope to have a few DOS commands for a batch file to perform the display switch before login. Thank you.

Virtual Drivers

How do Windows Virtual Drivers pass the HLK test and get signed by Microsoft

Multiple driver installations / control app fails to start

A common theme I've been seeing is:

Users try to install, then it fails, then they install the certificate, then try to install it again and it succeeds, but when they go back to use the control app, it doesn't connect.

If you go to device manager, you may see either multiple copies of "Virtual Display" or "Unknown Device".

To solve:

  1. Go to Device Manager
  2. Expand Display Adapters

If you see multiple copies of Virtual Display:

  1. Right click on every other copy of Virtual Display, click Uninstall device. DO NOT click attempt to remove the driver for this device
  2. Leave only 1 copy of the Virtual Display. It should work fine now
  3. You might have to also click "Update Driver" and choose it from the list

If you see Unknown Device, for every one you see in the list:

  1. Right click on Unknown Device
  2. Click Uninstall device
  3. After getting rid of them all, Uninstall and reinstall driver

Alternatively, for any of these, just uninstall the software completely and follow the instructions for manually installing the driver.

Make sure the certificate is installed properly before running the installer!

Ref #26

Monitor flashes black screen

Hi again

I'm back with another problem :/

Like the title suggests I've been having one or both monitors flashing black and then functioning normally. There seems to be no pattern or way to replicate it.

Sometimes there's times where it will flash both monitors multiple times in a minute, other times it will only flash one monitor once without another issue for a while.

I tried recording it but only managed to catch an example of it flashing my built in monitor once. I tried to catch it flashing both but it didn't act up for multiple minutes and I didn't want to waste my phone storage continuously waiting for it to happen again.

20231011_231756.mp4

Edit: new vid

20231012_011059.mp4

Rework gui control app

I'm getting this error on a windows 11 VM installed in hyper-v on windows 11.
Screenshot from 2023-10-21 15-34-02

trying to use this virual display to increase the resolution of this VM created via easy-gpu-pv script.

windows 11 cant find any shortcut and files after installed

Hi, I cannot find any file named including "Virtual Display" in my windows 11 after installed the software. I run install-cert.bat and then run virtual-display-driver-0.2.5-x86_64.msi with admin privileges.

It seems that it did not installed successfully.

OS name: Microsoft Windows 11 64bit
OS version:  10.0.22621  Build 22621

image

[Bug Report] Only 9 out of 10 enabled monitors work

I was testing this virtual display driver for a project to create remote workplaces using ASTER
However, out of the 10 enabled monitors only 9 monitors work.
image

I have tried reinstalling the driver but same result.
I am using Windows 11 Build 22631 with intel integrated graphics on intel core i5-5650U

Download latest build here

The latest master build has a lot of features and fixes, and is stable.

Between the current stable release and latest master, these are the following feature changes:

  • no admin access required for state updates to driver (cli tool, python bindings, or future gui)
  • working cli tool (thanks @kylewlacy!)
  • optimized performance when under high cpu load
  • lots of miscellaneous improvements and fixes
  • hardware cursor support (for remote desktop apps, this is a big plus!)
  • up to 16 monitors (minus your only existing monitors, usable number might be slightly lower)
  • complete bindings for rust, and python (python 3.12 only!)
    • examples on how to use it are here
  • windows service which does the job of starting persisted monitors on boot (disable or don't install if you're not interested in persistence)
    • place vdd-user-session-service.exe wherever you want
    • run as admin .\vdd-user-session-service.exe --install to install service
    • to uninstall, run as admin .\vdd-user-session-service.exe --uninstall
    • (you must keep the exe at the same location, otherwise the system won't be able to find it. if you want to re-locate it, uninstall the service first, move to new location, then reinstall it)

Note: there is currently no gui in master release

Download here - updated 4/12/24

To install:

  • uninstall the driver completely
  • Follow the manual driver installation steps here (you can skip the registry file and certificate steps)

Installation steps are not correct and not working on windows 10

Downloaded the latest release (v0.3.1-rc1) installer zip from github and extracted the zip file. Following the README I tried to run install-cert but couldn't.
image

Needed to r-click on it and selecting properties then checking unlock before being able to run it. The unlocking had to be done for installer too before being able to run.
image

After checking that GUI of windows showing certs (mentioned at the end of readme) the Trusted Publishers were empty!.
Imported the cert manually in there then ran the installer but it failed to install and gave me this error windows:
image

I'm testing on a windows 10 pro.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.