I have a Raspberry Pi 3B+, with a keyboard, mouse, and HDMI monitor connected to the Pi. It's being powered by a CanaKit power supply that came with the Pi. I have a string of ws2811 pixels that operate like NeoPixels (non-Adafruit-branded). (I have been driving these pixels with an Arduino for several years.) When I attach the light string as shown by Adafruit (using a 74AHCT125N), everything works just as expected (using GPIO18). (These pixels also works without the tri-state buffer, but I know it's best practice to raise the output from 3.3v to 5v.)
But I have two monitors on my desk, and I wanted the Pi on the other monitor. So, while the Pi was off, I switched the HDMI cable to the other monitor. Now, the light string no longer functions as expected. The lights are glitchy and the colors are not accurate. I thought maybe the GPIO voltage has sagged below the minimum threshold for my first ws2811 chip, but I have the 74AHCT125 there to raise the signal to 5v.
If I switch back to the original monitor, the light string behaves normally once again. With the second monitor, I decided to test GPIO21, which causes the lights behave normally again.
In summary, with the first HDMI monitor, GPIO18 and GPIO21 work fine to drive my pixels. With the second monitor, GPIO18 does not reliably drive the pixels, yet GPIO21 does.
Can anyone explain what relationship the operation of GPIO18 has with what HDMI monitor I'm using? Both monitors are 10-12 years old, max resolution capable is probably 1280x720, both made by Samsung.