Post

PiKVM with TESmart KVM Fixed!

After many hours and testing, swapping, resetting, and EDID training, all of my PiKVM and TESmart issues were solved with with a simple, cheap dongle. If you aren’t aware of the struggles I faced when using the PiKVM with a TESmart switch, all of it is detailed in a previous post where I ended up settling on another switch altogether. That’s all changed now with a simple EDID emulator passthrough adapter (affiliate link). However, for the uninformed, I’ll summarize the symptoms I experienced with the PiKVM and TESmart KVM and how I was able to fix these issues.

My Experience

When I originally set up my PiKVM (v3 at the time) I wanted to remote control more than one machine. I have a server rack and I rationalized that 8 would be a good number of machines to remote control and ultimately justify the cost of the hardware (cost spread over 8 machines). I also wanted something to rackmount since, after all, I have a server rack. That’s when I found the TESmart 8X1 HDMI KVM Switch 8 (affiliate link).

It met all of my requirements:

  • 8 ports
  • Rackmountable
  • Compatible with PiKVM (or so I thought)

This device was listed as compatible with PiKVM so I thought it was a safe bet.

I have (3) Intel NUC 11th Gen device I planned on connecting to this switch along with an old PC that has a ASUS Z87-PRO motherboard. I figured since they were all Intel based GPUs it was a safe bet. Boy was I wrong…

Shortly after configuring the PiKVM with the TESmart KVM and my devices it was clear that something was definitely wrong.

PiKVM Issues with TESmart As you can see, 1 out of 3 devices work. All 3 are the same model. Usually none of them work even after properly training them.

Some of the symptoms were:

  • Black screen without any video
  • When switching machines, you see video but quickly goes to black
  • When switching to some devices, you see a green screen
  • While getting a green screen, the CPU spikes on the PiKVM to where you have to reboot

Things I tried

I knew this was not good, however I figured it was something that could be fixed in software, after all the PiKVM is open source and running Linux. I did the obvious first, which was training the PiKVM and the TESmart switch according to TESmart’s YouTube video (which is excellent by the way). This kind of helped and by kind of I mean that 1 device would sometimes work but then after adding additional devices it would start experiencing the same symptoms as above. So I thought I could fix it in software…

I tried updating the device, testing different EDIDs,and even working with the creator of the PiKVM, Max Devaev, to see if we could tweak any settings to make it work with the TESmart KVM. After capturing logs and EDIDs, Max determined that the EDID was getting “poisoned” with some other EDID when switching. So we decided that it was a hardware issue. I ended up purchasing an EZCOO switch (affiliate link) which ended up working perfectly, albeit not rackmountable.

I reached out to TESmart around the same time to see if maybe it was something they had experience in the past, or something that might be addressed in a firmware update. They were great to work with (huge shout out to Ray from TESmart!) and walked me though some additional troubleshooting steps. Each step still yielded the same results. When we exhausted everything we could try, they sent a replacement to see if that might resolve the issue, but sadly it did not.

PiKVM v4 and More

All of this troubleshooting was done on the PiKVM v3, which I had purchased pretty late in its lifecycle, and v4 was right around the corner. Max from PiKVM said that he felt the issue could be resolved in their v4 model and mentioned he would send one when it launched. I was hopeful that this work. A few months later, the PiKVM v4 Plus arrived on my doorstep.

PiKVM v4 PiKVM v4 Plus & PiKVM v4 Mini

After receiving the PiKVM v4 and hooking it up to the TESmart switch I found that I had the same issue as before. This told me it was most likely something with the TESmart switch. I reached out to them again after discovering that I had the 4k 30 fps model and hoped that the 4k 60 fps model would make a difference, after all there were some people who said theirs worked just fine and internet rumors that the 60 fps model worked better.

I talked to TESmart again and they shipped a replacement, this time the 4k 60 fps model. I quickly hooked it up and once again experienced all of the same symptoms. I was really puzzled as to why this was happening to me when it works fine with other switches and others claimed to use this switch fine.

Community to the Rescue!

After testing all of this, I was convinced that I would never be able to use my rackmount KVM. I have to admit that I wasn’t that upset that it didn’t work, I was more upset that I didn’t know when to quit. I was frustrated that I sunk over 80 hours of my time trying to fix this when in fact there was no fix. Sometimes you gotta just let go…

That’s when I got lucky and someone posted a comment on my previous post with something new to try. The comment from juristoeckli that mentioned something about an “EDID Emulator”. I had never heard of these before nor was I sure that this was the issue. Then NateDiTo also left a comment about how they had used these EDID emulators (affiliate link) and they worked for them. Finally, I wasn’t alone! Someone else who was experiencing the same thing or at least knew my struggle!

That’s when I decided to give it a shot. I told myself “If these don’t work, I am giving up!” and I meant it this time (maybe… 😂).

EDID Emulator This little device will override your EDID possibly making it compatible with the device it’s connecting to.

How I fixed it

I purchased a cheaper version of the EDID emulator (affiliate link) hoping they would work. Also, serendipitously, Ray from TESmart had mentioned an EDID emulator in an email that same night. He mentioned this as a last resort, however in my mind this was my last resort. After the devices arrived, I quickly inserted the emulators into the TESmart and connected my machines to them.

EDID Emulator with TESmart I plugged them directly into the TESmart switch and all devices started working immediately!

I retrained the devices per the video, and sure enough after powering the first one one it worked! I could see my machine in the PiKVM without issues! I quickly tempered my expectations because I have been here before. One device would sometimes work fine, but never more than one. Sure enough after training the next 2 devices it worked fine. I could now control all 3 devices from the PiKVM with the TESmart KVM switch. I tested by rebooting the devices and even the PiKVM and everything still works! They now work as reliably as they did with the EZCOO switch.

So why does this work?

When I think about the solution, it’s challenging to know how and why this is working. As I understand it, EDID emulators are meant to override a device’s EDID, basically telling the connected device which capabilities it supports. You would think that my devices were sending the proper EDID to the TESmart switch, however as I experienced with 4 devices (2 unique), this was not the case.

Some people have mentioned that this happens more often when running Linux, and I even experienced that myself too. When one of my Intel NUCs was running Windows it seemed to work fine but when running Proxmox (Debian Linux) it seemed to experience these issues. This could be a Windows vs. Linux issue, or it could be chalked up to my other experience where 1 device would work fine but none of the others. I’ve tested quite a bit over the span of a year and it’s challenging to know for sure. Oddly enough, this doesn’t happen to everyone who uses TESmart switches. I do think it’s a combination of TESmart + Device + OS/driver that triggers the problem, because again, it works with my with EZCOO switch. I also have a hunch that these emulators might be instructing the device’s GPU to stay powered on even when a device isn’t plugged into it (just like HDMI dummy plugs), however I don’t know if that’s true. If you know, let me know in the comments below!

I am considering this “fixed” now even though technically this is a “workaround.” A huge thanks to Max from PiKVM, Ray from TESmart (and the TESmart team), and juristoeckli and NateDiTo in the comments because without all of you I would have given up. Each new idea or additional troubleshooting step motivated me to keep going. I can finally use this switch and recommend it to those who want something rackmountable (with workarounds).

Config

Here is the configuration I use:

/etc/kvmd/override.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# /etc/kvmd/override.yaml.bak.tesmart
####################################################################
#                                                                  #
# Override Pi-KVM system settings. This file uses the YAML syntax. #
#                                                                  #
#    https://github.com/pikvm/pikvm/blob/master/pages/config.md    #
#                                                                  #
# All overridden parameters will be applied AFTER other configs    #
# and "!include" directives and BEFORE validation.                 #
# Not: Sections should be combined under shared keys.              #
#                                                                  #
####################################################################

kvmd:
  gpio:
    drivers:
      tes:
        type: tesmart
        host: 192.168.20.63
        port: 5000
      wol_server0:
        type: wol
        mac: 1c:69:7a:ad:11:85
      wol_server1:
        type: wol
        mac: 88:ae:dd:05:cf:09
      wol_server2:
        type: wol
        mac: 88:ae:dd:05:c6:3b
      wol_server3:
        type: wol
        mac: 3c:ec:ef:0e:d3:a4
      wol_server3a:
        type: wol
        mac: 3c:ec:ef:0e:d3:a5
      wol_server4:
        type: wol
        mac: 3c:ec:ef:90:c8:0c
      wol_server4a:
        type: wol
        mac: 3c:ec:ef:90:c8:0d
      reboot:
        type: cmd
        cmd: [/usr/bin/sudo, reboot]
      restart_service:
        type: cmd
        cmd: [/usr/bin/sudo, systemctl, restart, kvmd]
    scheme:
      ch0_led:
        driver: tes
        pin: 0
        mode: input
      ch1_led:
        driver: tes
        pin: 1
        mode: input
      ch2_led:
        driver: tes
        pin: 2
        mode: input
      ch3_led:
        driver: tes
        pin: 3
        mode: input
      ch4_led:
        driver: tes
        pin: 4
        mode: input
      pikvm_led:
        pin: 0
        mode: input
      ch0_button:
        driver: tes
        pin: 0
        mode: output
        switch: false
      ch1_button:
        driver: tes
        pin: 1
        mode: output
        switch: false
      ch2_button:
        driver: tes
        pin: 2
        mode: output
        switch: false
      ch3_button:
        driver: tes
        pin: 3
        mode: output
        switch: false
      ch4_button:
        driver: tes
        pin: 4
        mode: output
        switch: false
      wol_server0:
        driver: wol_server0
        pin: 0
        mode: output
        switch: false
      wol_server1:
        driver: wol_server1
        pin: 0
        mode: output
        switch: false
      wol_server2:
        driver: wol_server2
        pin: 0
        mode: output
        switch: false
      wol_server3:
        driver: wol_server3
        pin: 0
        mode: output
        switch: false
      wol_server3a:
        driver: wol_server3a
        pin: 0
        mode: output
        switch: false
      wol_server4:
        driver: wol_server4
        pin: 0
        mode: output
        switch: false
      wol_server4a:
        driver: wol_server4a
        pin: 0
        mode: output
        switch: false
      reboot_button:
        driver: reboot
        pin: 0
        mode: output
        switch: false
      restart_service_button:
        driver: restart_service
        pin: 0
        mode: output
        switch: false
    view:
      table:
        - ["#NUC1", ch0_led, ch0_button, "wol_server0 | WoL"]
        - ["#NUC2", ch1_led, ch1_button, "wol_server1 | WoL"]
        - ["#NUC3", ch2_led, ch2_button, "wol_server2 | WoL"]
        - ["#HL15", ch3_led, ch3_button, "wol_server3 | WoL-10g", "wol_server3a | WoL-10g"]
        - ["#Storinator", ch4_led, ch4_button, "wol_server4 | WoL-10g", "wol_server4a | WoL-10g"]
        - ["#PiKVM", "pikvm_led|green", "restart_service_button|confirm|Service", "reboot_button|confirm|Reboot"]

edit /etc/sudoers.d/99_kvmd

add to the end:

1
2
kvmd ALL=(ALL) NOPASSWD: /usr/bin/reboot
kvmd ALL=(ALL) NOPASSWD: /usr/bin/systemctl

Then reboot or restart services.

Where to Buy

Here are the items that I used during this project.

(Affiliate links may be included. I may receive a small commission at no cost to you.)

Join the conversation

⚙️ See all the hardware I recommend at https://l.technotim.live/gear

🚀 Don’t forget to check out the 🚀Launchpad repo with all of the quick start source files

🤝 Support me and help keep this site ad-free!

This post is licensed under CC BY 4.0 by the author.