Achieving Full Screen PBP in 4K, One Person's Journey
Tags: productivity, programming, azure, machinelearning
Published: 2019-08-10 23:39:23

---
title: Achieving Full Screen PBP in 4K, One Person's Journey
published: true
description: Two-machine setup of ViewSonic's VX4380-4K
tags: productivity, programming, azure, machine learning
cover_image: https://thepracticaldev.s3.amazonaws.com/i/w2uq8k9s09gqywz18kz3.jpg
---

# Theory vs Practice
It seemed simple. Use a 4K monitor to run multiple computer screens simultaneously. There are dozens of choices for this. Picture by Picture (PBP) is a feature so common you'll scarcely see it in long form in the description. Just the acronym is all that's needed to sell the concept. But not all PBP designs and not all monitor drivers are equal. While it's tempting to call out certain vendors, the half-life of driver implementations (and generations of monitor hardware technology) is so short that this article might be out of date by the time you read it. So consider this in context if you're thinking about running multiple systems into a single display.

## Bigger (and Wider) is not always Better
This journey started with my 55 inch 4K TV, which was occasionally pressed into service while working from home. Mostly it served as a proxy for a white board during group working sessions with video feeds and slide/board presentations. Eventually I started using it more generally, but for detailed coding work it created too much eye strain. It is an earlier generation 4K TV and simply wasn't designed for at-arms-length viewing. So when I moved to remote work full-time, I looked for a purpose-built 4K monitor. I also wanted it to handle more than one input simultaneously, so I can work across multiple systems. While researching I quickly set aside the idea of an ultra-wide curved monitor. I'm not looking to frag virtual enemies at 120fps. The work I'm planning focuses more on using my system GPU for small-scale TensorFlow experiments. In fact, one of my early use cases was to set up my personal machine for various machine learning benchmark exercises (in Windows 10 and Ubuntu) while the work notebook handled general office and light-lift development duties. So the use case is fairly simple and straight-forward, or so I thought.

## Reading the Fine Print
Here's a photo of the first 4K monitor I bought, with the initial attempt at PBP shown below.

![Philips 4K PBP double letter boxing](https://thepracticaldev.s3.amazonaws.com/i/phxtc131csezypjezs09.jpg)

Needless to say this is not at all what I was expecting. I tried all combinations of display properties, from 1:1 to full width, and nothing made any difference. I contacted the manufacturers technical support team and in few days I received a rather curt response.

> *Please make sure you are running HDMI 2.0 3840x2160@60hz, turn to page 10 in the user manual, PBP will have bars on the top and bottom.* 

<center>[cue sad trombone]</center>

So, in effect the customer has to use their psychic powers to know that 10-pages deep into the manual there's a proviso which says that *full screen PBP __is not possible__*. At that moment I realized I had not bought a monitor. I had bought a $600 boomerang. At least the product return process worked perfectly, so **that** feature was fully implemented.  

## Take Two, this time with Feeling
The second monitor was lighter, used less power, was practically immune to screen burn and was nearly $100 cheaper than my first choice. So I felt lucky in many respects. However the second PBP result was not much better than the first. 

![ViewSonic 4K PBP letter-boxing](https://thepracticaldev.s3.amazonaws.com/i/mkoxrksc9p8u0uaipa3k.jpg)

While running full screen the images scaled to the full height of the display area, there was still letter-boxing occurring. 

![ViewSonic monitor input Full Screen setting](https://thepracticaldev.s3.amazonaws.com/i/9kh6hu8ltln9d4phu1hg.jpg)

So I sent a message to the second manufacturer's tech support group. And while this team was more polite, the initial response wasn't all that helpful. All of their suggestions simply re-iterated through the combinations of settings I had already tried, to no positive result. We even conducted an over-the-phone session to ensure we were apples-to-apples on the settings and output. It nagged at me that this wasn't something that manufacturers had already solved. Running 1920X2160 side-by-side with two separate monitor inputs seemed (to me, at least) to be a standard use case for a 4K monitor that's capable of handling more than one input at a time. But I resigned myself to switching separately between the two inputs at the full 3840X2160 resolution - toggling between them using the rear panel monitor controls. In truth, it was a nice "problem" to have. 

## Checking under the (Other) Hood
A week later I received an email from the second tech support team, to reach out via phone and attempt another possible fix. I wasn't hopeful, but once we started chatting it out the idea dawned on me that *__the computer's__ video driver* might be shaping the output in anticipation of a 16:9 aspect ratio. 

![NVidia Control Panel settings - Full Screen](https://thepracticaldev.s3.amazonaws.com/i/mwss4ydl2zqp3b7y0mw0.png)

Once we checked the NVidia Control Panel, we saw that it was set to format the chosen resolution to "Aspect Ratio". That in effect meant that the driver was letter-boxing the output to the monitor when the resolution was set to a non-16:9 resolution. Once the setting was changed to "Full Screen" then everything fell into place.

![ViewSonic 4K with proper PBP configuration](https://thepracticaldev.s3.amazonaws.com/i/w2uq8k9s09gqywz18kz3.jpg)

There it was - two separate systems filling right/left sides of the screen, each with their own over/under window arrangement. With a 43" screen, each side could provide two 21" 1080p areas. And it's possible to set up an over/under PBP, so 3840X1080 is also possible. But after confirming that also worked as expected I went back to the left-right arrangement. It is glorious. 

<center>[cue angels singing]</center>

I added a USB switch to toggle an external keyboard and mouse between the two systems. Since the work laptop connected to its own VNET, a Synergy-like software solution was not an option. However the physical "non-V KVM" works exceptionally well, and I adapted to it in less than a day.

## Greater than the Sum of its Parts
So this turned out to be a layered object lesson. I was genuinely surprised that two different manufacturers *didn't* know how to address this out-of-the-gate. In a computing world where so much consumer-level hardware is plug-and-play, this was a surprisingly high-friction affair. I'm glad it was eventually solved, but it goes to show that you can't necessarily count on all domain knowledge to be in one place. That's one of the reasons I'm leaving this trail of breadcrumbs here. I had wondered whether trying the NVidia Control Panel settings with the first monitor would have made it work. But given that model *also* had issues with potential screen burn (**how** are those designs *still* a thing?) I would have returned it either way. 

The final result is much better than I expected, providing flexibility in managing workloads across the two local machines. It also gives me more options for attaching to VMs - whether GPU-provisioned AMIs in AWS or Data Science VMs in Azure. I can essentially run a "quad" setup where the third and fourth "boxes" are machine learning instances doing full-bore workloads in the cloud, with the burden of running the virtual desktops for those sessions spanning the two slabs under my desk. But again that's a discussion I'll save for some other time. For now I'm happy just to have the pieces in place for true multi-tasking in the home office.