It’s not entirely clear what “interacting with other systems” means, and in scrolling through this thread, I’m not sure where it was originally brought up as a category of side effect. But if it means something like “Makes the printer splash some ink”, then, sure, this is indeed a “side effect” of the expression that causes it to happen; it’s an observable change caused by evaluation of that expression which can’t be reversed or ignored or any such thing. But keep in mind that “side effect” is just a technical term, and doesn’t necessarily mean anything pejorative or indicate anything about the programmer’s intent: often, when you use "side effect"s, they are the desired effect, name notwithstanding.
There are a bunch of things involved here: side effects, determinism, purity, referential transparency… What Digital Stimulus was explaining was determinism: an expression is deterministic if it has a fixed value, no matter where or when it is evaluated (thus, “multiply(4, 5)” is deterministic but “getKeyboardInput()” and “randomNumberBetween(1, 10)” are not).
An expression has side effects if inserting or removing evaluations of it can cause the behavior of a program to change; thus an expression like “multiplyAndPrint(4, 5)” would be deterministic but still have side effects, since it would always return the value 20, but extraneous evaluations of it would cause more "20"s to end up printed. It’s a “side effect” in the sense that there’s more going on with evaluation of this expression than just calculation of its value.
An expression is pure if it is deterministic with no side effects.
Finally, referential transparency is a property where expressions in a program can be freely replaced by others which “refer to the same value” without changing the behavior of the program. Referential transparency is desirable because it makes programs much easier to reason about, and in a world with only pure expressions, referential transparency is automatic. However, most languages are far from entirely pure (the major exception, as always, is Haskell), and do contain some violations of referential transparency (consider, for example, the difference between “int x = getKeyboardInput(); return x+x;” and “int x = getKeyboardInput(); return x + getKeyboardInput();”).