1diff --git a/graphviz/backend/dot_command.py b/graphviz/backend/dot_command.py
2index d1903e6..6470d11 100644
3--- a/graphviz/backend/dot_command.py
4+++ b/graphviz/backend/dot_command.py
5@@ -10,7 +10,7 @@ from . import parameters
6 __all__ = ['command']
7
8 #: :class:`pathlib.Path` of layout command (``Path('dot')``).
9-DOT_BINARY = pathlib.Path('dot')
10+DOT_BINARY = pathlib.Path('@graphviz@/bin/dot')
11
12
13 def command(engine: str, format_: str, *,
14diff --git a/graphviz/backend/unflattening.py b/graphviz/backend/unflattening.py
15index 5ed25d6..8d2faf8 100644
16--- a/graphviz/backend/unflattening.py
17+++ b/graphviz/backend/unflattening.py
18@@ -11,7 +11,7 @@ from . import execute
19 __all__ = ['unflatten']
20
21 #: :class:`pathlib.Path` of unflatten command (``Path('unflatten')``).
22-UNFLATTEN_BINARY = pathlib.Path('unflatten')
23+UNFLATTEN_BINARY = pathlib.Path('@graphviz@/bin/unflatten')
24
25
26 def unflatten(source: str,
27diff --git a/graphviz/backend/viewing.py b/graphviz/backend/viewing.py
28index 6d4a4d1..2cc6cd8 100644
29--- a/graphviz/backend/viewing.py
30+++ b/graphviz/backend/viewing.py
31@@ -54,7 +54,7 @@ def view_darwin(filepath, *, quiet: bool) -> None:
32 @tools.attach(view, 'freebsd')
33 def view_unixoid(filepath, *, quiet: bool) -> None:
34 """Open filepath in the user's preferred application (linux, freebsd)."""
35- cmd = ['xdg-open', filepath]
36+ cmd = ['@xdgutils@/bin/xdg-open', filepath]
37 log.debug('view: %r', cmd)
38 kwargs = {'stderr': subprocess.DEVNULL} if quiet else {}
39 subprocess.Popen(cmd, **kwargs)
40diff --git a/tests/_common.py b/tests/_common.py
41index ab93461..7eaca89 100644
42--- a/tests/_common.py
43+++ b/tests/_common.py
44@@ -10,7 +10,7 @@ __all__ = ['EXPECTED_DOT_BINARY', 'EXPECTED_DEFAULT_ENCODING',
45 'as_cwd',
46 'check_startupinfo', 'StartupinfoMatcher']
47
48-EXPECTED_DOT_BINARY = pathlib.Path('dot')
49+EXPECTED_DOT_BINARY = pathlib.Path('@graphviz@/bin/dot')
50
51 EXPECTED_DEFAULT_ENCODING = 'utf-8'
52
53diff --git a/tests/backend/test_execute.py b/tests/backend/test_execute.py
54index 05d6525..78484cb 100644
55--- a/tests/backend/test_execute.py
56+++ b/tests/backend/test_execute.py
57@@ -57,6 +57,7 @@ def test_run_check_input_lines_mocked(mocker, sentinel, mock_popen,
58 mock_sys_stderr.flush.assert_called_once_with()
59
60
61+@pytest.mark.skip(reason='empty $PATH has no effect')
62 @pytest.mark.usefixtures('empty_path')
63 @pytest.mark.parametrize(
64 'func, args',
65diff --git a/tests/backend/test_unflattening.py b/tests/backend/test_unflattening.py
66index 033a4d2..7d52689 100644
67--- a/tests/backend/test_unflattening.py
68+++ b/tests/backend/test_unflattening.py
69@@ -8,7 +8,7 @@ import graphviz
70
71 import _common
72
73-EXPECTED_UNFLATTEN_BINARY = pathlib.Path('unflatten')
74+EXPECTED_UNFLATTEN_BINARY = pathlib.Path('@graphviz@/bin/unflatten')
75
76
77 @pytest.mark.exe
78diff --git a/tests/backend/test_viewing.py b/tests/backend/test_viewing.py
79index f5acddb..6b34884 100644
80--- a/tests/backend/test_viewing.py
81+++ b/tests/backend/test_viewing.py
82@@ -25,6 +25,6 @@ def test_view(mocker, mock_platform, mock_popen, mock_startfile, quiet):
83 if mock_platform == 'darwin':
84 mock_popen.assert_called_once_with(['open', 'nonfilepath'], **kwargs)
85 elif mock_platform in ('linux', 'freebsd'):
86- mock_popen.assert_called_once_with(['xdg-open', 'nonfilepath'], **kwargs)
87+ mock_popen.assert_called_once_with(['@xdgutils@/bin/xdg-open', 'nonfilepath'], **kwargs)
88 else:
89 raise RuntimeError