As you mentioned the stty is identical, so the problem must be somewhere else. The commands GR, GD, Gm are listed in the source code here:

[thomas@x230 ~/dev/astronomy/indilib/indi/drivers/telescope]$ grep -r ":GR#\|:GD#\|:Gm#" .
./eq500x.cpp: else if (getCommandString(PortFD, b, ":GD#") < 0)
./eq500x.cpp: else if (getCommandString(PortFD, b, ":GR#") < 0)
./lx200pulsar2.cpp: return (getSexa(fd, "#:GR#", ra) && getSexa(fd, "#:GD#", dec));
./lx200pulsar2.cpp: bool success = PulsarTX::sendReceive(fd, "#:GR#", response);
./lx200driver.cpp: DEBUGFDEVICE(lx200Name, DBG_SCOPE, "CMD <%s>", ":GR#");
./lx200driver.cpp: if ((error_type = tty_write_string(fd, ":GR#", &nbytes_write)) != TTY_OK)
./lx200driver.cpp: DEBUGFDEVICE(lx200Name, DBG_SCOPE, "CMD <%s>", ":GR#");
./lx200driver.cpp: if ((error_type = tty_write_string(fd, ":GR#", &nbytes_write)) != TTY_OK)
./lx200driver.h:#define getLX200RA(fd, x) getCommandSexa(fd, x, ":GR#")
./lx200driver.h:#define getLX200DEC(fd, x) getCommandSexa(fd, x, ":GD#")
./lx200gemini.cpp: // Send ':Gm#'
./lx200gemini.cpp: const char *cmd = ":Gm#";
./magellandriver.h:#define getMAGELLANRA(fd, x) getCommandSexa(fd, x, "#:GR#")
./magellandriver.h:#define getMAGELLANDEC(fd, x) getCommandSexa(fd, x, "#:GD#")
./rainbow.cpp: if (sendCommand(":GR#", res) == false)
./rainbow.cpp: if (sendCommand(":GD#", res) == false)
./ioptronHC8406.cpp::GR# 2:12:57.4# RA
./ioptronHC8406.cpp::GD# +90* 0: 0# DEC
./crux_mount.cpp: sprintf(szCommand, "#:\\GE($GR #:GR#"
./crux_mount.cpp: ":\\GE$GD #:GD#"
./lx200_OnStep.cpp: getCommandString(PortFD, OSPier, ":Gm#");
./lx200_OnStep.cpp: // * 94 pierSide (N if never) {Same as :Gm# (E, W, None)}

Read More...