Вы можете использовать виртуальное решение PBX с открытым исходным кодом FreeSwitch вместе со своим расширением GSMopen для отправки USSD-команд [source].
Например, если код USSD для получения вашего баланса (скажем) * 901 #, вы бы выполнили:
chat SMS|interface3|ussd|*901#
В других ответах, конечно, есть более простые решения, но в случае, если вы используете GSMopen в любом случае (например, потому что это единственный способ сделать голосовые вызовы GSM в Linux ...).